gpt4 book ai didi

c# - 从子项设置父项属性

转载 作者:行者123 更新时间:2023-11-30 22:13:13 25 4
gpt4 key购买 nike

我想知道如何通过样式设置自定义控件的属性。

我有一个基于名为“Substrate”的切换按钮的自定义控件,在该按钮上我有一个名为“SubstrateState”的依赖属性。它以枚举作为值。

在一个单独的文件中,我有一个向控件添加上下文菜单的样式。

当用户按下上下文菜单中的菜单项之一时,我希望该属性以某个预定义的值触发。

<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’上提供值引发异常。”

内部异常“local:Substrate 不是 Int32 的有效值。”

我在我的值转换器中放置了断点,但它们从未触发,所以我认为问题出在其他地方。

我做错了什么?

最佳答案

您收到的错误是因为您正在设置 AncestorLevel=local:Substrate,而 AncestorLevel 需要 Int32。

此外,您无法按照您的方式实现它。也就是说,您不能像现在这样对 Setter 的属性进行绑定(bind),因为它不是 DependancyProperty。您可以做的是为您的 MenuItem 提供一个 Name 并使用 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>

关于c# - 从子项设置父项属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com