0

WPF UI 要素は幅と高さを定義し、背景はイメージ ブラシに設定され、イメージ ソースは実行時にいくつかのランダムなイメージに向けられます。Stretch プロパティが設定されていないため、デフォルト値の「Fill」が機能すると想定しています。コントロールのサイズと画像のサイズは異なるため、実行時に、背景画像ブラシは何らかの縦横比で塗りつぶされます。つまり、コントロール内に (視覚的に) パディングが適用されます。このパディングされた値を取得する方法はありますか?

サンプルコード:

<Grid Width="2000" Height="2000">
<ListBox>
    <ListBox.Background>
        <ImageBrush ImageSource="{Binding Source={x:Static local:MyModel.Instance},Path=ImageSource,Converter={StaticResource pathImageConverter}}" />
    </ListBox.Background>
</ListBox>
</Grid>

色を使用する場合、イメージ ブラシの代わりに、領域全体を塗りつぶします。これは実際のパディングではありません。視覚的には、リスト ボックスの境界と画像の境界からのパディングがあるように感じます。これのスナップショットを取得してみましょう。

4

2 に答える 2

1

これらの値を取得するための API はありません。残念ながら、自分で計算する必要があります。詳しく説明しましょう...

コメントに示されているように、ImageBrushパディングの原因ではありません。ブラシは、取得した領域を単純にペイントします。もちろん、 のモードによってはImageBrush、全体を塗るのではなく、一部だけを塗ることもあります。ブラシを a に変更するSolidColorBrushと、ブラシが取得する領域全体が表示されます。これは、イメージ ブラシが塗りつぶされる領域と同じである必要がありFillます。

しかし、私はそれがブラシであることを非常に疑っていますControlTemplateが、ListBox. Aero テーマで実行している場合、既定では、テンプレートは で始まり、BorderそのBackgroundプロパティ テンプレートが にバインドされておりListBox、 で同じことを行いますBorderThickness(さらに悪いことに、固定パディングもあります。 1 では、その上に背景が描画されます)。

したがって、ブラシの「パディング」を計算するには、次のように同じことを行う必要がありBorderますBorderThicknessPadding

ただし、別のテーマで実行している場合、またはコントロールのスタイルが変更されている場合は、コントロール テンプレートが異なる可能性があり、計算が異なる可能性があります...

于 2015-05-22T19:33:18.320 に答える