2

内容がTextBlockであるGridViewColumnがあります。

GridViewColumn column = new GridViewColumn();
column.Header = new TextBlock { Text = header };
MyGridView.Columns.Add(column);

2番目の列のTextBlock背景(黒)を実行時に変更すると、次の結果になります。

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

TextBlockは、使用可能なすべてのスペースを占有するわけではありません。
なんで?どうすればこれを修正できますか?
ありがとう。

4

2 に答える 2

3

TextBlockは、デフォルトではその内容と同じ大きさです。これを試して:

column.Header = new TextBlock { Text = header, HorizontalAlignment = HorizontalAlignment.Stretch };

ここのDoco:System.Windows.Horizo​​ntalAlignment

編集:

あなたの問題は、ListView内で何かをしているためです。これは、位置合わせ/サイズ設定に関しては、少し異なる方法で処理する必要があります。XAMLでこれを行う方法については、この前のSOの質問を確認してください。WPFでは、コントロールをストレッチしてListView列に入力します。

于 2012-10-02T11:09:26.543 に答える
2

他の回答が回答としてマークされている理由は少し混乱しています。問題は、ヘッダーコンテナーが拡張されていないことです(WPFビジュアルツリーをスキャンすると、拡張されていContentPresenterないStretchことがわかりますCenter。代わりに拡張されています)。

ヘッダーに表示されるコンテンツがすべてのヘッダースペースを占めるようにヘッダーを拡大する場合は、GridViewColumnHeaderスタイルをオーバーライドする必要があります。

<ListView HorizontalContentAlignment="Stretch" ...>
    <ListView.Resources>
        <Style x:Key="StretchedHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.Resources>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Width="200" HeaderContainerStyle="{StaticResource StretchedHeaderStyle}" DisplayMemberBinding="{Binding Path=SomeValue, Mode=OneWay"/>
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

上記のコードサンプルは、コンテナにまで及ぶリストビューを生成します。静的リソースヘッダーストレッチスタイルがあります(この場合、ストレッチする各列に適用する必要があります。とを削除してx:KeyHeaderContainerStyle=すべてのヘッダーをストレッチします)。また、すべての列セルにストレッチスタイルをグローバルに適用します(ヘッダースタイルの表示方法と同様に、必要に応じて個々の列に適用できます)。

コードビハインドでこれを行う必要がある場合は、スタイルを作成し、列(HeaderContainerStyle)に適切なスタイルプロパティを設定するだけです。

アップデート

ヘッダースタイルをグローバルに適用するためのはるかに優れた方法があることに気づきました。タイプ適用スタイルをリソースとして宣言する代わりにListView、スタイルをに直接適用する方がはるかに優れていますGridView

<ListView HorizontalContentAlignment="Stretch" ...>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.ColumnHeaderContainerStyle>
                <Style TargetType="{x:Type GridViewColumnHeader}">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                </Style>
            </GridView.ColumnHeaderContainerStyle>
            <GridView.Columns>
                <GridViewColumn Width="200" DisplayMemberBinding="{Binding Path=SomeValue, Mode=OneWay"/>
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

どちらの方法でも同じ結果が得られますが、上記のこの方法は、ヘッダーコンテナのスタイルを直接担当するstyleプロパティを割り当てるため、はるかにクリーンなアプローチです。ただし、特定の列のみを拡大する必要がある場合は、最初の方法が最善の策です。

于 2014-11-04T19:32:29.587 に答える