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-使用相对路径Self.Sibling.Child绑定到控件_Wpf - Fatal编程技术网

WPF-使用相对路径Self.Sibling.Child绑定到控件

WPF-使用相对路径Self.Sibling.Child绑定到控件,wpf,Wpf,下面是我目前拥有的XAML。我想通过一个切换按钮来模拟一棵树,listview将其可见性绑定到切换按钮chcked状态。问题是,我需要和一个兄弟姐妹的孩子绑定。这可能吗 <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal"> <ToggleButton Name="tglB

下面是我目前拥有的XAML。我想通过一个切换按钮来模拟一棵树,listview将其可见性绑定到切换按钮chcked状态。问题是,我需要和一个兄弟姐妹的孩子绑定。这可能吗

            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                        <ToggleButton Name="tglBtn">+</ToggleButton>
                            <TextBlock>test</TextBlock>
                </StackPanel>
                    <ListView Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}, Path=IsChecked, Converter={StaticResource boolToVis}}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Thread"  DisplayMemberBinding="{Binding thread_name}" />
                            <GridViewColumn Width="Auto" Header="Created"  DisplayMemberBinding="{Binding thread_created}" />
                            <GridViewColumn Width="Auto" Header="Modified" DisplayMemberBinding="{Binding last_modified}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>

        </DataTemplate>
        </ListBox.ItemTemplate>


    </ListBox>
此代码不起作用,因为切换不是祖先

            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                        <ToggleButton Name="tglBtn">+</ToggleButton>
                            <TextBlock>test</TextBlock>
                </StackPanel>
                    <ListView Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}, Path=IsChecked, Converter={StaticResource boolToVis}}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Thread"  DisplayMemberBinding="{Binding thread_name}" />
                            <GridViewColumn Width="Auto" Header="Created"  DisplayMemberBinding="{Binding thread_created}" />
                            <GridViewColumn Width="Auto" Header="Modified" DisplayMemberBinding="{Binding last_modified}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>

        </DataTemplate>
        </ListBox.ItemTemplate>


    </ListBox>

            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                        <ToggleButton Name="tglBtn">+</ToggleButton>
                            <TextBlock>test</TextBlock>
                </StackPanel>
                    <ListView Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}, Path=IsChecked, Converter={StaticResource boolToVis}}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Thread"  DisplayMemberBinding="{Binding thread_name}" />
                            <GridViewColumn Width="Auto" Header="Created"  DisplayMemberBinding="{Binding thread_created}" />
                            <GridViewColumn Width="Auto" Header="Modified" DisplayMemberBinding="{Binding last_modified}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>

        </DataTemplate>
        </ListBox.ItemTemplate>


    </ListBox>

+
测试

您可以使用ElementName绑定来访问ToggleButton

我找到了一个解决方案,可以在样式中重复使用(不需要使用ElementName)。我已经写出了完整的答案,包括示例和屏幕截图。

我本来打算使用elementname,但我认为它会绑定到所有同名的切换,但我只是尝试了一下,效果很好。是的,我知道我们可能会这样认为,因为我们在数据板中使用它:)但是考虑一个常规的用户控件,我们把它的元素绑定绑定到了第二个想法中。但请注意,同一个用户控件可以在应用程序中多次实例化。因此,每个DataTemplate实例都有自己的作用域(我想!),只要它有效,我就可以忽略@Jobi!谢谢
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                        <ToggleButton Name="tglBtn">+</ToggleButton>
                            <TextBlock>test</TextBlock>
                </StackPanel>
                    <ListView Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}, Path=IsChecked, Converter={StaticResource boolToVis}}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Thread"  DisplayMemberBinding="{Binding thread_name}" />
                            <GridViewColumn Width="Auto" Header="Created"  DisplayMemberBinding="{Binding thread_created}" />
                            <GridViewColumn Width="Auto" Header="Modified" DisplayMemberBinding="{Binding last_modified}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>

        </DataTemplate>
        </ListBox.ItemTemplate>


    </ListBox>