我需要在后面的代码中以编程方式在网格资源中应用样式。
我有以下代码段:
<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
答案 0 :(得分:2)
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);