c# - 以编程方式在资源中使用事件 setter 设置样式

标签 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

最佳答案

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/

相关文章:

wpf - 当父类型可以不同时,如何访问 wpf 中父的 DataContext?

c# - 使用 BinaryFormatter 序列化的对象导致对象版本更改的原因是什么?

c# - 远程服务器返回错误 : NotFound #2

c# - 命令绑定(bind)到中继命令不起作用

c# - xmlns :dc mean in C# WPF? 是什么

c# - stackpanel 中动态添加的控件在 wpf c# 中不可见

c# - 从代码背后设计样式

c# - NullReferenceException错误数据库数据到表html

c# - 修剪 NSString 的开始( Objective-C 中的 TrimStart(string) )

基于数据类型的WPF设置样式?