如何以编程方式添加具有属性的Setter"模板"到C#/ WPF中的触发器?

时间:2017-07-24 20:30:40

标签: c# wpf xaml triggers mouseevent

尝试以编程方式将“触发器”添加到“样式”。我希望Trigger Setter的属性为" Template"。我还希望Setter Value是DynamicResource -

这就是我的.xaml的样子,我想以编程方式添加触发器:

<Style x:Key="ContentStyle" TargetType="{x:Type ListBoxItem}">
   <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="true">
         <Setter
            Property="Template"
            Value="{DynamicResource HoverStyle1}" />
      </Trigger>
   </Style.Triggers>
</Style>

这是我到目前为止在C#中编译的,它不能编译,即setter.Propery和setter.Value行:

Style myStyle = null;
myStyle = listboxPatientList.TryFindResource("ContentStyle") as Style;

Setter setter = new Setter();
setter.Property = UIElement.Template;
setter.Value = {DynamicResource HoverPatientFull};

Trigger trigger = new Trigger();
trigger.Property = UIElement.IsMouseOverProperty;
trigger.Value = true;
trigger.Setters.Add(setter);

myStyle.Triggers.Add(trigger);

我想以编程方式执行此操作的原因是因为我的系统无法在mouseevents和touchevents之间进行指定。我已经找到了一种以编程方式确定输入设备的方法,具体取决于这种情况,应该添加或不存在此触发器。如果存在触发器时触发器存在,则不会将其注册为鼠标点击,只是鼠标悬停。

1 个答案:

答案 0 :(得分:3)

首先,要在代码中设置Template属性,请使用

setter.Property = Control.TemplateProperty;

其次,要访问资源,请尝试

setter.Value = FindResource("HoverPatientFull") as /*Whatever data type the resource is*/;