0

私はコンボボックスを持っています。各項目は、見出しと説明で構成されています。見出しと説明のあるアイテム

2番目の項目でテキストボックスを使用したいと思います。これはうまく機能します。;) ここに画像の説明を入力してください

ここで、(テキストボックスのあるアイテムが他のすべてのアイテムよりも高いため)、選択したアイテム(テキストボックスのあるアイテム)にテキストボックスが表示されない場合、コンテンツのみが文字列として表示される可能性があるかどうかを尋ねたいと思いました。

ここに画像の説明を入力してください

<ComboBox Height="35" Margin="0 2 0 2" SelectedIndex="0">
    <ComboBoxItem>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image Source="/WpfApplication14;component/Resources/Icon1.ico" Height="22" Width="22" Grid.Column="0" HorizontalAlignment="Left" />
            <Grid Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                    <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                </Grid.RowDefinitions>
                <TextBlock Text="Item Titel 1" Grid.Row="0" FontWeight="Bold" />
                <TextBlock Text="Item Beschreibung 1" Grid.Row="1" FontStyle="Italic">
                    <TextBlock.TextEffects><TextEffect Foreground="#FF555454" /></TextBlock.TextEffects>
                </TextBlock>
            </Grid>
        </Grid>
    </ComboBoxItem>
    <ComboBoxItem>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image Source="/WpfApplication14;component/Resources/Icon2.ico" Height="22" Width="22" Grid.Column="0" HorizontalAlignment="Left" />
            <Grid Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                    <RowDefinition Height="24" MinHeight="24" MaxHeight="24" />
                </Grid.RowDefinitions>
                <TextBlock Text="Item Titel 2" Grid.Row="0" FontWeight="Bold" />
                <TextBox Grid.Row="1">
                    <TextBox.Text>c:\temp\test</TextBox.Text>
                    <TextBox.Style>
                        <Style>
                            <Setter Property="TextBox.Height" Value="20"/>
                        </Style>
                    </TextBox.Style>
                </TextBox>
            </Grid>
        </Grid>
    </ComboBoxItem>
</ComboBox>
4

2 に答える 2

1

交換:

        <TextBox Grid.Row="1">
            <TextBox.Text>c:\temp\test</TextBox.Text>
            <TextBox.Style>
                <Style>
                    <Setter Property="TextBox.Height" Value="20"/>
                </Style>
            </TextBox.Style>
        </TextBox>

と:

        <TextBox Grid.Row="1" Text="c:\temp\test" Height="20" BorderThickness="0" Padding="0" />

ただし、まだ問題があります。

コンボボックスの高さは35ピクセルです。

<ComboBox Height="35" Margin="0 2 0 2" SelectedIndex="0">

ただし、ComboBoxItemの高さは16 + 24=40ピクセルです。

            <Grid.RowDefinitions>
                <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                <RowDefinition Height="24" MinHeight="24" MaxHeight="24" />
            </Grid.RowDefinitions>

とにかく切り捨てられます。comboBoxを大きくするか、comboBoxItemを小さくします。

サイド注:テキストブロックの前景にテキスト効果を使用する必要はありません。

    <TextBlock Foreground="#FF555454" />

同様に機能します

于 2012-07-10T08:16:05.137 に答える
1

これを実現するには、TextBoxを使用して(行ったように)テキストを編集し、TextBlockを使用してアイテムが選択されたときにテキストを表示します。

TextBlock / TextBoxの表示/非表示をComboBoxItemのIsSelected値にバインドし、ValueConverterを使用してtrue/false値をVisible/Collapsedに変換することで表示/非表示にできます。

ここでもコードを少し編集して、コードを簡単にしました。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ComboBox Name="myComboBox" Margin="0 2 0 2" SelectedIndex="0" Grid.Row="1">
        <ComboBoxItem>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid Grid.Column="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                        <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                    </Grid.RowDefinitions>
                    <TextBlock Text="Item Titel 1" Grid.Row="0" FontWeight="Bold" />
                    <TextBlock Text="Item Beschreibung 1" Grid.Row="1" FontStyle="Italic" Foreground="#FF555454" />
                </Grid>
            </Grid>
        </ComboBoxItem>
        <ComboBoxItem Name="myComboBoxItem">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid Grid.Column="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="16" MinHeight="16" MaxHeight="16" />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Text="Item Titel 2" Grid.Row="0" FontWeight="Bold" />

                    <TextBox Grid.Row="1" Name="myTextBox" Text="c:\temp\test" Height="20" Visibility="{Binding ElementName=myComboBoxItem, Path=IsSelected, Converter={ValueConverter:BooleanToVisibilityConverter}}" />
                    <TextBlock Name="myTextBlock" Text="{Binding ElementName=myTextBox, Path=Text}" Grid.Row="1" FontStyle="Italic" Foreground="#FF555454" Visibility="{Binding ElementName=myComboBoxItem, Path=IsSelected, Converter={ValueConverter:BooleanToVisibilityConverter}, ConverterParameter=Inverted}" />
                </Grid>
            </Grid>
        </ComboBoxItem>
    </ComboBox>
</Grid>

ValueConverterのコード:

public abstract class BaseConverter : MarkupExtension
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}

public class BooleanToVisibilityConverter : BaseConverter, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        if (parameter != null && parameter.ToString().Equals("Inverted"))
        {
            if ((bool)value)
                return Visibility.Visible;
            return Visibility.Collapsed;
        }
        if ((bool)value)
            return Visibility.Collapsed;
        return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            if (parameter.ToString().Equals("Inverted"))
                return (Visibility)value != Visibility.Visible;
            return (Visibility)value == Visibility.Visible;
        }
        catch (Exception e)
        {
            // Error handling
            return false;
        }
    }
}
于 2012-07-10T09:15:53.857 に答える