【发布时间】:2015-12-09 10:25:14
【问题描述】:
我正在尝试为按钮创建样式,尤其是更改 IsMouseOver 样式(必须通过控件模板覆盖它)。我正在尝试这段代码(我必须使用 c#,没有 xaml),但按钮只变成黄色,IsMouseOver 没有做任何事情。
private void CreateElement(int i)
{
UIElementOut[i] = new Button();
var uiElement = (Button)UIElementOut[i];
uiElement.Width = 100;
uiElement.Height = 100;
uiElement.VerticalAlignment = VerticalAlignment.Center;
uiElement.HorizontalAlignment = HorizontalAlignment.Center;
uiElement.Content = TextIn[i];
uiElement.FontFamily = new FontFamily(FFontInput[i]);
uiElement.FontSize = Convert.ToDouble(FontSizeIn[i]);
Style MyButtonStyle = new Style();
ControlTemplate templateButton = new ControlTemplate(typeof(Button));
FrameworkElementFactory elemFactory = new FrameworkElementFactory(typeof(Button));
elemFactory.Name = "myButton";
elemFactory.SetValue(Button.BackgroundProperty, Brushes.Yellow);
templateButton.VisualTree = elemFactory;
elemFactory.AppendChild(new FrameworkElementFactory(typeof(ContentPresenter)));
Trigger templateTrigger = new Trigger { Property = Button.IsPressedProperty, Value = true };
templateTrigger.Setters.Add(new Setter { Property = Button.ForegroundProperty, Value = Brushes.Violet });
templateTrigger.Setters.Add(new Setter { Property = Button.BackgroundProperty, Value = Brushes.Red });
templateButton.Triggers.Add(templateTrigger);
Setter setter = new Setter { TargetName = "myButton", Property = Button.TemplateProperty, Value = templateButton };
MyButtonStyle.Setters.Add(setter);
uiElement.Style = MyButtonStyle;
uiElement.Template = templateButton;
}
【问题讨论】:
-
当你说“我必须使用 c#,没有 xaml”时,你真的是指“我必须”吗?还是说“我想”更准确?因为数据绑定是执行此操作的正确方法,我想不出任何人会“必须”按照您的方式进行操作的单一原因。如果您阐明了您认为需要以错误方式执行此操作的原因,则很有可能有一个很好的解决方案可以完全避免它。
-
@lecloneur 为什么将
Button放在按钮模板中?外部Button与内部Button不同,它们也不会以任何方式链接。我也没有看到IsMouseOver的行为。只有IsPressed触发器。 -
Mark Feldman,我必须使用 c#,因为我正在为一个名为 vvvv 的软件编写 WPF 控制插件,我完全不知道如何将 xaml 与 vvvv 一起使用。这就是我只在这里使用 c# 的原因,而且我知道这绝对不是最简单的方法……@dkozl,在发布我做错的代码时,你确实应该看到 IsMouseOver 而不是 IsPressed。关于内部和外部按钮我不知道,所以我会搜索一下(我是初学者)。谢谢