web-dev-qa-db-ja.com

WPF-Width = "*"のDataGrid列、ただしコンテンツに合わせてMinWidth

DataGrid列のセットに比例幅(_Width="\*"),_を持たせるが、少なくとも最小幅をコンテンツの幅にするための最良/正しい方法は何ですか現時点では、_Width="*"_を使用すると、列は正確に比例しますが、列が細すぎるとコンテンツがトリミングされます。_Width="Auto"_を使用すると、列自体がコンテンツに完全に合わせられます。 、しかしこれはそれらをすべて異なるサイズにします。

私が欲しいのは、_Width="\*"_、_MinWidth="Auto"_のような2つの組み合わせです。したがって、余分な幅がある場合、列はすべて同じ幅になりますが、グリッドを小さくすると、コンテンツは決して切り取られます。

悲しいことに、_MinWidth="Auto"_は存在しないので、列のMinWidthプロパティをバインドする必要があると思いますが、バインド先を正確に把握することは困難です。

WPF _"MinWidth="_に列の最も広いコンテンツの幅を伝えるにはどうすればよいですか?

32
Andy T

少し遅れていますが、あなたの質問を見つけて、純粋なXAMLソリューションをプログラムしました。

 <ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 

ElementNameは、スペースの大部分を占めるコントロールを指します。もちろん、幅が制限されている要素でのみ可能です。たとえばGroupBoxに対してこれを行うと、より大きな幅にのみサイズ変更でき、より小さな幅にはサイズ変更できません。

MinWidthの値の候補がいくつかある場合、IMultiValueConverterを自分で記述する必要があります。これはobject []を受け取り、それをfloatに解析し、最大値(そのちょうど1 linq自分だけで使用し、コンバータの不適切な使用を処理する必要がない場合はクエリ)

この方法は、MinWidthの動的な変更もサポートします。

19
Tomas Grosup

セットする Width = "Auto" XAMLで。

次に、コードで:

MinWidth = ActualWidth
Width = new GridLength(1, GridUnitType.Star)
12
Anon

GridViewColumn内でGrid列のサイズを正しく設定するのにも問題がありました。いくつか試してみましたが、UniformGridが見つかりました。それは私にとって究極のソリューションでした。それはただ動作します。以前は知りませんでした... VSツールボックスにデフォルトでは存在しないようです(?).

UniformGridの詳細については、 こちら をご覧ください。

2
Ollikat

XAMLで列に名前を付けます。

<Grid>
      <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*" Name="Col1"/>
             <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
</Grid>

次に、次のようにコードでMinWidthプロパティを設定します。

public MainWindow()
{
    InitializeComponent();

    Col1.MinWidth = 340; //enter desired minimum width here
}
0
danielcooperxyz