Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 样式中自定义依赖项属性的触发器 问题_Wpf_Xaml - Fatal编程技术网

Wpf 样式中自定义依赖项属性的触发器 问题

Wpf 样式中自定义依赖项属性的触发器 问题,wpf,xaml,Wpf,Xaml,我定义了一个可重用控件MyControl,它扩展了一个文本框 我想将触发器设置为其依赖项属性之一。 所以我添加了一个样式,带有触发器 但是如果我将样式的TargetType设置为MyControl,我会得到一个XAML警告,指出'MyControl'TargetType与元素'TextBlock'的类型不匹配 如果将其设置为TextBlock,则会出现编译错误,成员“MyDependencyProperty”无法识别或无法访问。 如何使用触发器定义此样式 样品 C#代码隐藏 namespa

我定义了一个可重用控件MyControl,它扩展了一个文本框

我想将触发器设置为其依赖项属性之一。
所以我添加了一个样式,带有触发器

但是如果我将样式的TargetType设置为MyControl,我会得到一个XAML警告,指出
'MyControl'TargetType与元素'TextBlock'的类型不匹配

如果将其设置为TextBlock,则会出现编译错误,
成员“MyDependencyProperty”无法识别或无法访问。

  • 如何使用触发器定义此样式

样品 C#代码隐藏
namespace UserControls.Local
{
公共部分类MyControl:TextBlock
{
#特罗格多区
public static readonly dependencProperty TrogdorProperty=dependencProperty.Register(
“Trogdor”、typeof(bool)、typeof(MyControl)、新属性元数据(default(bool));
公墓
{
获取{return(bool)GetValue(TrogdorProperty);}
set{SetValue(TrogdorProperty,value);}
}
#端区
公共MyControl()
{
初始化组件();
}
}
}
XAML
我找到的解决方案是“完全限定”绑定上的依赖项属性:

<Trigger Property="local:MyControl.Trogdor" Value="True">

不确定您是否仍在寻找解决方案,但答案对我有效,而您的答案对我无效

它使用根元素上绑定的DataTrigger,而不是触发器:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True">
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/>
</DataTrigger>


对于您的解决方案,我按下按钮,变量的值会发生变化,但样式触发器不会应用这些变化,就像没有通知它变量的变化一样。

为什么我的解决方案不起作用?它发出XAML警告了吗?它没有编译吗?它没有影响UI吗?@A在它编译之后,我按下按钮,变量的值发生了变化,但是样式触发器没有应用这些变化,就像他没有被告知变量的变化一样。我在其他帖子中也看到过类似于你的答案,但在我的情况下似乎不起作用。仍在试图找出原因。你的情况可能不一样,你可能在做一些不同的事情。否则,解决方案就会奏效。你能分享一个你的解决方案有效而我的解决方案无效的工作示例吗?通常最简单的解决方案是最好的。你为什么不直接使用
..
而不是
..