初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace PCL;
|
||||
|
||||
public class MyTextButton : Label
|
||||
{
|
||||
public delegate void ClickEventHandler(object sender, EventArgs e);
|
||||
|
||||
// 指向动画
|
||||
|
||||
private const int animationTimeIn = 100;
|
||||
private const int animationTimeOut = 200;
|
||||
|
||||
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string),
|
||||
typeof(MyTextButton), new PropertyMetadata("", (sender, e) =>
|
||||
{
|
||||
if (Equals(e.OldValue, e.NewValue)) return;
|
||||
var button = (MyTextButton)sender;
|
||||
ModAnimation.AniStart(
|
||||
new[]
|
||||
{
|
||||
ModAnimation.AaOpacity(button, -button.Opacity, 50),
|
||||
ModAnimation.AaCode(() => button.Content = e.NewValue, after: true),
|
||||
ModAnimation.AaOpacity(button, 1d, 170)
|
||||
}, "MyTextButton Text " + button.Uuid);
|
||||
}));
|
||||
|
||||
private string colorName;
|
||||
|
||||
// 鼠标事件
|
||||
|
||||
public bool isMouseDown;
|
||||
|
||||
// 基础
|
||||
|
||||
public int Uuid = ModBase.GetUuid();
|
||||
|
||||
public MyTextButton()
|
||||
{
|
||||
SetResourceReference(ForegroundProperty, "ColorBrush1");
|
||||
Background = ThemeManager.colorSemiTransparent;
|
||||
PreviewMouseLeftButtonDown += MyTextButton_MouseLeftButtonDown;
|
||||
MouseLeave += (_, _) => MyTextButton_MouseLeave();
|
||||
PreviewMouseLeftButtonUp += MyTextButton_MouseLeftButtonUp;
|
||||
MouseEnter += (_, _) => RefreshColor();
|
||||
MouseLeave += (_, _) => RefreshColor();
|
||||
IsEnabledChanged += (_, _) => RefreshColor();
|
||||
MouseLeftButtonDown += (_, _) => RefreshColor();
|
||||
MouseLeftButtonUp += (_, _) => RefreshColor();
|
||||
}
|
||||
|
||||
// 文本
|
||||
|
||||
public string Text
|
||||
{
|
||||
get => (string)GetValue(TextProperty);
|
||||
set => SetValue(TextProperty, value);
|
||||
}
|
||||
|
||||
public event ClickEventHandler? Click;
|
||||
|
||||
private (string ForeName, int Time) GetVisualState()
|
||||
{
|
||||
if (isMouseDown)
|
||||
return ("ColorBrush4", 30);
|
||||
if (IsMouseOver)
|
||||
return ("ColorBrush3", animationTimeIn);
|
||||
return ("ColorBrush1", animationTimeOut);
|
||||
}
|
||||
|
||||
private void MyTextButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
isMouseDown = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void MyTextButton_MouseLeave()
|
||||
{
|
||||
isMouseDown = false;
|
||||
}
|
||||
|
||||
private void MyTextButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (!isMouseDown) return;
|
||||
isMouseDown = false;
|
||||
ModBase.Log("[Control] 按下文本按钮:" + Text);
|
||||
Click?.Invoke(this, null);
|
||||
ModMain.RaiseCustomEvent(this);
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void RefreshColor()
|
||||
{
|
||||
var (ForeName, Time) = GetVisualState();
|
||||
|
||||
// 重复性验证
|
||||
if ((colorName ?? "") == (ForeName ?? ""))
|
||||
return;
|
||||
colorName = ForeName;
|
||||
// 触发颜色动画
|
||||
ControlVisualHelpers.AnimateColorOrSetResource(this, ForegroundProperty, ForeName, Time,
|
||||
"MyTextButton Color " + Uuid, ControlVisualHelpers.ShouldAnimate(this));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user