将切换按钮的选中状态绑定到用户控件的可见性



我现在有一种方法可以使用代码隐藏和更改"面板"的可见性来做到这一点,但我想知道这是否可以以直接的 xaml 方式完成?

您应该能够使用 ElementName 绑定它,以及将 true/false 转换为可见性的IValueConverter

<Grid>
    <Grid.Resources>
        <local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
    </Grid.Resources>
    <UserControl Visibility="{Binding ElementName=toggle,
                                      Path=IsChecked,
                                      Converter={StaticResource BoolToVisibilityConverter}}" 
    />
    <ToggleButton x:Name="toggle" />
</Grid>

和转换器:

public class BoolToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var isChecked = (bool)value;
        return isChecked ? Visibility.Visible : Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在这里你可以像下面这样做.. 您可以将usercontroltogglebutton作为父Contentcontrol的内容,并使用DataTemplate触发器根据ToggleButton的检查状态设置用户控件的可见性

       <ContentControl>
            <ContentControl.ContentTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <local:myusercontrol  x:Name="control"/>
                        <ToggleButton Content="click" x:Name="toggleBtn"/>
                    </StackPanel>
                    <DataTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="false"  SourceName="toggleBtn">
                            <Setter Property="Visibility" Value="Visible" TargetName="control"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="true" SourceName="toggleBtn">
                            <Setter Property="Visibility" Value="Collapsed" TargetName="control"/>
                        </Trigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ContentControl.ContentTemplate>
        </ContentControl>

最新更新