3

選択したアイテムのサイズに応じて ComboBox のサイズが変更されないようにしたい。次の簡単な例を考えてみましょう。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="150" Width="300">
    <GroupBox Header="Group Header" Margin="5">
        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <ComboBox MinWidth="100" Grid.Column="0" Margin="5" MaxWidth="150"/>
                <ComboBox Grid.Column="1" Margin="5" MinWidth="110">
                    <ComboBoxItem Content="Very loooooooooooooooooooooooooooooooooooooooong text"/>
                    <ComboBoxItem Content="Normal text"/>
                </ComboBox>
            </Grid>
        </ScrollViewer>
    </GroupBox>
</Window>

2 番目の ComboBox で最初のアイテムを選択すると、その ComboBox が展開され、選択したアイテムのコンテンツ全体が収まるようになり、左側の ComboBox が非表示になります。

私は次の3つのことを達成したいと考えています。

  • コントロールが最小サイズに収まるようにスクロールビューアを用意する
  • Window が非常に大きい場合、2 番目の ComboBox を残りのサイズに合わせたい
  • 2 番目の ComboBox で非常に長いアイテムを選択した場合、そのサイズを保持し、選択したアイテムの内容に合わせて調整しないようにしたい

出来ますか?

4

2 に答える 2

0

ScrollViewer 内の ComboBox でも同じ問題がありました。水平スクロールではなく、垂直スクロールのみが必要でした。しかし、ComboBox は、選択した項目に合わせてサイズを変更し続けました。アリゲーターの回答を使用しましたが、MinWidth を ActualWidth に置き換えました。これにより、CombobBox 自体のサイズが変更されなくなりましたが、選択した項目は常に使用可能なスペースを使用します。

public class FixedWidthComboBox : ComboBox
{
    protected override Size MeasureOverride(Size constraint)
    {
        return base.MeasureOverride(new Size(ActualWidth, constraint.Height));
    }
}
于 2017-10-08T19:37:30.670 に答える