C# 从子属性设置父属性
我想知道如何从样式设置自定义控件的属性 我有一个基于名为“subscriber”的togglebutton的自定义控件,在该控件上我有一个名为“SubstrateState”的dependencyproperty。它将枚举作为值 在一个单独的文件中,我有一个样式,它将上下文菜单添加到控件中 当用户按下上下文菜单中的一个菜单项时,我希望该属性以某个预定义值触发C# 从子属性设置父属性,c#,wpf,xaml,binding,custom-controls,C#,Wpf,Xaml,Binding,Custom Controls,我想知道如何从样式设置自定义控件的属性 我有一个基于名为“subscriber”的togglebutton的自定义控件,在该控件上我有一个名为“SubstrateState”的dependencyproperty。它将枚举作为值 在一个单独的文件中,我有一个样式,它将上下文菜单添加到控件中 当用户按下上下文菜单中的一个菜单项时,我希望该属性以某个预定义值触发 <Style TargetType="{x:Type local:Substrate}"> <Setter Proper
<Style TargetType="{x:Type local:Substrate}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Substrate}">
<Grid>
<Grid.ContextMenu>
<ContextMenu Background="#212121">
<MenuItem Header="Aborted">
<MenuItem.Style>
<Style TargetType="MenuItem">
<Style.Triggers>
<Trigger Property="IsPressed"
Value="True">
<Setter Property="{Binding SubstrateState, RelativeSource={RelativeSource AncestorLevel=local:Substrate}, Converter=converter:StringToSubstrateStatesConverter}"
Value="Aborted" />
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我运行此命令时,我得到:
“在'System.Windows.Baml2006.TypeConverterMarkupExtension'上提供值时引发异常。”
内部异常
“本地:基板不是Int32的有效值。”
我把断点放在我的值转换器中,它们从不触发,所以我认为问题出在别处
我做错了什么?由于设置了AncestorLevel=local:BASIER,而AncestorLevel需要Int32,所以出现错误 而且,你不能以你现在的方式实现它。i、 e您不能像现在这样对Setter的属性进行绑定,因为它不是依赖性属性。您可以做的是为您的
菜单项
提供一个名称
,并使用ControlTemplate.Trigger
更新触发器setter中的控件属性:
<Style TargetType="{x:Type local:Substrate}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Substrate}">
<Grid>
<Grid.ContextMenu>
<ContextMenu Background="#212121">
<MenuItem x:Name="myMenuItem" Header="Aborted">
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
<ControlTemplate.Triggers>
<Trigger SourceName="myMenuItem" Property="IsPressed" Value="true">
<Setter Property="SubstrateState" Value="Aborted"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您是否提供了整个控制模板?从我的角度来看,你的模板有问题,因为我甚至看不到任何上下文菜单。我做了更改,错误消失了。但属性仍然没有设置。我尝试过添加valueconverter,但仍然没有任何效果。我在我这边尝试过,结果成功了。。在输出窗口中是否有任何绑定错误?没有什么,我将编写一个没有所有开销的小项目,看看是否可以让它工作。谢谢好的,我找到了问题的原因。如果使用SubstrateState属性的绑定,则在按下菜单项时,无法再设置它。我还没有解决这个问题的办法,但我会把它作为另一个问题发布。谢谢你的帮助。