我需要在后面的代码中以编程方式应用网格资源中的样式。
我有以下代码片段:
<Grid x:Name="grid">
<Grid.Resources>
<Style TargetType="{x:Type ig:LabelPresenter}">
<EventSetter Event="PreviewMouseMove" Handler="LabelPresenter_PreviewMouseMove"/>
</Style>
</Grid.Resources>
.
.
.
</Grid>
我想在代码后面创建Style
并将其添加到资源中以处理相关操作。
我试图以这种方式做到这一点,但它不起作用。
public MainWindow()
{
InitializeComponent();
var style = new Style { TargetType = typeof(LabelPresenter) };
var eventSetter = new EventSetter(PreviewMouseMoveEvent, new MouseButtonEventHandler(LabelPresenter_PreviewMouseMove));
style.Setters.Add(eventSetter);
grid.Resources.Add("style", style);
}
我哪里错了?
提前致谢。
编辑:我写错了网格的名称。网格的正确名称是grid
最佳答案
XAML 标记中定义的样式是隐式的,即它没有 x:Key
。因此,将传递给 Add
方法的第一个参数更改为 typeof(LabelPresenter)
。
此外,PreviewMouseMove
事件处理程序接受 MouseEventArgs
:
var style = new Style { TargetType = typeof(LabelPresenter) };
var eventSetter = new EventSetter(PreviewMouseMoveEvent, new MouseEventHandler(LabelPresenter_PreviewMouseMove));
style.Setters.Add(eventSetter);
grid.Resources.Add(typeof(LabelPresenter), style);
关于c# - 以编程方式在资源中使用事件 setter 设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52186579/