2

グリッドに次のレイアウトがあります

<Grid>
    <Grid.RowDefinitions >
        <RowDefinition Height="50" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Button Click="Button_Click"  Grid.Row="0" Width="50" Grid.Column="2" Content="Test" />
    <Grid Grid.Row="1">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="120" />
        <ColumnDefinition  />
        <ColumnDefinition Width="Auto"  />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="0" Grid.Row="1" Background="red" />
    <StackPanel Grid.Column="1" Grid.Row="1" Background="Blue" />
    <GridSplitter x:Name="gs"  Grid.Column="1" Grid.Row="1" Width="10" />
    <StackPanel x:Name="green" MinWidth="100" Grid.Column="2" Grid.Row="1" Background="Green" />
   </Grid>
</Grid>

私は基本的に、ボタンが押されたときにこのレイアウトが必要です。

   <StackPanel Grid.Column="0" Grid.Row="1" Background="red" />
    <StackPanel Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Background="Blue" />
    <!--<GridSplitter x:Name="gs"  Grid.Column="1" Grid.Row="1" Width="10" />
    <StackPanel x:Name="green" MinWidth="100" Grid.Column="2" Grid.Row="1" Background="Green" />-->

そして、ボタンがもう一度押されたときのこのレイアウト:

    <StackPanel Grid.Column="0" Grid.Row="1" Background="red" />
    <StackPanel Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="1" Background="Blue" />
    <GridSplitter x:Name="gs"  Grid.Column="1" Grid.Row="1" Width="10" />
    <StackPanel x:Name="green" MinWidth="100" Grid.Column="2" Grid.Row="1" Background="Green" />

グリッドスプリッターと最後のパネルを非表示にして、中央の列のパネルをその場所に埋めるにはどうすればよいですか?(およびその逆)実行時に列スパンを変更する方法はありますか?

ありがとう!

4

1 に答える 1

1

トリガーを使用することも、ボタンがクリックされたときに発生するストーリーボード/アニメーションを使用することもできます。

あなたはこのようなことをしたい.....

<Window.Resources>

        <Storyboard x:Key="OnClick1">
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="gs" Storyboard.TargetProperty="(FrameworkElement.Width)">
                <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="green" Storyboard.TargetProperty="(FrameworkElement.MinWidth)">
                <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>

    </Window.Resources>
    <Window.Triggers>
        <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="button">
            <BeginStoryboard Storyboard="{StaticResource OnClick1}"/>
        </EventTrigger>
    </Window.Triggers>

このアニメーションを逆にするには、状態を維持するために何かを使用する必要があります。たとえば、ToggleButtonを使用し、ToggleButton.Checked &&ToggleButton.Uncheckedroutedイベントを使用します。または、状態を維持する依存関係プロパティを分離コードに追加します。

主な問題は、MinWidth属性も変更することを忘れないことだと思います。MinWidthは実際の幅を上書きします。

于 2010-01-15T14:17:02.227 に答える