0

垂直ボタンでラップパネルを作成してみます。すべてのボタンは、画像とテキストブロックで構成されています。ユーザーが GridSplitter を移動したときに、Microsoft がウィンドウの左側の Outlook で行ったことを実行したいと考えています。ユーザーがラップ パネルの高さを縮小すると、配置されていないボタンがある場合、テキストブロックが消えます (ボタンは画像だけで構成されます)。

どうやってやるの。

感謝

4

2 に答える 2

1

私が正しく理解していれば。テキストと画像を含むボタンを表示したいのですが、ボタンの幅を特定のサイズに縮小すると、画像のみが表示されます。

もしそうなら、データトリガーで実装できるはずです。

<Window x:Class="StackOverflow1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StackOverflow1"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <local:isLessThanConverter x:Key="MyisLessThanConverter"/>
    <Style x:Key="myWidthTrigger" TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType=Button}, Converter={StaticResource MyisLessThanConverter}, ConverterParameter=90}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <ListView HorizontalContentAlignment="Stretch">
        <Button x:Name="myButton" Width="Auto">
            <StackPanel Orientation="Horizontal">
                <TextBlock x:Name="MyTextBlock" Style="{StaticResource myWidthTrigger}" Text="Test"></TextBlock>
                <Image Source="image.png" Height="15"></Image>
            </StackPanel>
        </Button>
    </ListView>
    <GridSplitter Width="5" Grid.Column="1" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext"></GridSplitter>
</Grid>

この IValueConvertor も使用します。

[ValueConversion(typeof(double), typeof(string))]
public class isLessThanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
            if ((double)value < double.Parse((string)parameter))
            {
                return true;
            }
            else
            {
                return false;
            }

    }

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

}

私はこれの専門家ではないので、よりクリーンな方法があるかもしれません。リクエストされたラップパネルの代わりにリストビューも使用しました。

お役に立てれば

于 2012-04-05T16:01:41.980 に答える
0

使用したいのはExpanderコントロールのようです。このStackOverflow の投稿Expanderでは、別の s を開いたときに他の s を自動的に閉じる方法について説明しています。これは、Outlook で説明しているものと同じように機能します。

于 2012-04-05T14:26:51.620 に答える