Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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
C# 从子属性设置父属性_C#_Wpf_Xaml_Binding_Custom Controls - Fatal编程技术网

C# 从子属性设置父属性

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

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

我有一个基于名为“subscriber”的togglebutton的自定义控件,在该控件上我有一个名为“SubstrateState”的dependencyproperty。它将枚举作为值

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

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

<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属性的绑定,则在按下菜单项时,无法再设置它。我还没有解决这个问题的办法,但我会把它作为另一个问题发布。谢谢你的帮助。