Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 为什么可以';将ToggleButton.IsChecked属性附加到扩展器_Wpf_Xaml_Attached Properties - Fatal编程技术网

Wpf 为什么可以';将ToggleButton.IsChecked属性附加到扩展器

Wpf 为什么可以';将ToggleButton.IsChecked属性附加到扩展器,wpf,xaml,attached-properties,Wpf,Xaml,Attached Properties,我们可以将DockPanel.Dock连接到扩展器,但无法连接ToggleButton.IsChecked。为什么? <Expander DockPanel.Dock='Bottom'> <!--Compile--> <Expander ToggleButton.IsChecked='True'> <!--Doesn't compile--> 表格: Dock是用RegisterAttached方法注册的,而不是Register检查的是不可附加的

我们可以将DockPanel.Dock连接到扩展器,但无法连接ToggleButton.IsChecked。为什么?

<Expander DockPanel.Dock='Bottom'> <!--Compile-->
<Expander ToggleButton.IsChecked='True'> <!--Doesn't compile-->
表格:


Dock
是用
RegisterAttached
方法注册的,而不是
Register

检查的是不可附加的属性。如果要绑定切换按钮和扩展器,可以执行以下操作:

<ToggleButton x:Name="toggle" IsChecked="True" />
<Expander IsExpanded="{Binding ElementName=toggle, Path=IsChecked}" />

两者都是依赖属性,但正如您所指出的,一个是Register,另一个是RegisterAttached。这就是区别,也是为什么IsChecked不能暴露在其他控件上的原因。请参阅本文中的不同答案(特别是Haris Hasan的答案),以更好地解释两种注册方法之间的差异

根据您上面的评论,如果您只想在已有的ToggleButton之外添加一个复选框到扩展器(标题),那么只需执行以下操作:

 <Expander>
    <Expander.Header>
        <CheckBox VerticalAlignment="Center" IsChecked="{Binding MyBooleanPropertySomewhere, Mode=TwoWay}"/>
    </Expander.Header>
</Expander>

那么就没有理由让它暴露在扩展器上——您可以在那里设置或绑定IsChecked


希望这能有所帮助。

您是在尝试使用外部切换按钮来扩展扩展器,还是只是在默认情况下尝试扩展扩展器?我只是在尝试将“IsChecked”属性添加到此扩展器。它不打算绑定到“IsExpanded”属性。不清楚为什么要这样做,因为扩展器有一个
ToggleButton
,并且它通过自己的
IsChecked
属性设置自己的状态,作为
ToggleButton
ControlTemplate
的一部分。认知下面的答案回答了您的问题。我希望在标题中有一个带有
复选框的
扩展器
,并且我希望此复选框的状态可以作为附加属性从
扩展器
本身访问。您所指的
ToggleButton
是控制
IsExanded
状态的按钮。我真的不明白外部ToggleButton的意义。扩展器已经有一个了。为什么不直接声明和设置
?我希望OP能理解这一点。@Isaahnelson在大多数情况下,扩展器IsExpanded属性应该足够了。我假设OP在寻找不同的东西,那么我的问题是:是什么让“Dock”可以连接?从源代码的角度来看,这两个属性(Dock和IsChecked)似乎相似。我试图在问题的评论中解释我的意图。我想为特定样式键的所有
Expander
设置
复选框。所以我想将
IsChecked
绑定到提到的附加属性。
<ToggleButton x:Name="toggle" IsChecked="True" />
<Expander IsExpanded="{Binding ElementName=toggle, Path=IsChecked}" />
 <Expander>
    <Expander.Header>
        <CheckBox VerticalAlignment="Center" IsChecked="{Binding MyBooleanPropertySomewhere, Mode=TwoWay}"/>
    </Expander.Header>
</Expander>