4

我现在有一种方法可以使用代码隐藏和更改 'panels' 的可见性,但我想知道这是否可以通过直接的 xaml 方式完成?

4

2 回答 2

5

您应该能够使用 绑定 this ElementName,以及IValueConverter将 true/false 转换为 Visibility 的 an:

<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();
    }
}
于 2013-09-20T19:15:15.343 回答
1

在这里你可以像下面那样做......你可以同时拥有你的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>
于 2013-09-20T19:27:04.810 回答