以编程方式在资源中设置事件发生者的样式

时间:2018-09-05 13:39:20

标签: c# wpf xaml

我需要在后面的代码中以编程方式在网格资源中应用样式。

我有以下代码段:

<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

1 个答案:

答案 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);