1

Gridをクリックしてを折りたたもうとしていButtonます。これはButton、xaml での my の表現方法です。

 <Button Grid.Column="1" Grid.RowSpan="3" Width="25" Content="&lt;&lt;" Click="OnClicked" x:Name="btnCollapse"></Button>

GridこれをクリックするとButton(ドッキングされたウィンドウのようなもの)折りたたまGridれ、もう一度クリックすると元にButton戻ります。これは私がコードビハインドでそれを行う方法です:

private bool clicked;
private void OnClicked(object sender, RoutedEventArgs e)
{
    clicked             = !clicked;
    //leftPane is my grid
    leftPane.Visibility = clicked ? Visibility.Collapsed:Visibility.Visible;
    btnCollapse.Content = clicked ? ">>" : "<<";
}

これは問題なく動作します。私の質問は、このロジックをコード ビハインドではなく、純粋に xaml で表現するにはどうすればよいかということです。

私のレイアウト:

<Grid>
<Grid/>
<GridSplitter/>
</Grid>
<Button/>
4

1 に答える 1

4

あなたのVisibility依存関係プロパティをGridブール値プロパティ( INotifyPropertyChangedDataContextを実装する必要があります) にバインドし、 BooleanToVisibilityConverterを使用する必要があります。

private bool _isGridVisible;
public bool IsGridVisible
{
    get { return _isGridVisible; }
    set
    {
        if (_isGridVisible != value)
            return;
        _isGridVisible = value;
        OnPropertyChanged("IsGridVisible"); // This can sometimes be named RaisePropertyChanged
    }
}

private void OnClick(object sender, RoutedEventArgs e)
{
    IsGridVisible = !IsGridVisible;
}

XAML の場合:

<Grid Visibility="{Binding IsGridVisible, Converter={StaticResource BooleanToVisibilityConverter}">
    <!-- stuff -->
</Grid>


ボタンのコンテンツを設定する方法:

IValueConverter:

public class MyBooleanToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool)value ? ">>" : "<<";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

<Button Click="OnClick" Content="{Binding IsGridVisible, Converter={StaticResource MyBooleanToStringConverter}}"/>

スタイル:

<Button Click="OnClick">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Content" Value="<<"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsGridVisible}" Value="False">
            <Setter Property="Content" Value=">>"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
于 2013-01-04T14:54:19.130 に答える