3

私の LOB アプリでは、通常、ユーザーがデータを入力するためのさまざまなテキストブロックとテキスト ボックスを含むコンテナーを作成します。通常、各コントロールに特定のマージンまたは垂直/水平の配置を適用する必要があります。

フォームに次のようなグリッドがあるとします (簡潔にするために、多くのマークアップは省略されています)。

<Grid>
   <Grid.ColumnDefinitions.../>
   <Grid.RowDefinitions.../>

   <TextBlock Text="MyLabel" />
   <TextBox Text={Binding ...}/>
   .
   '
   <!-- Repated a bunch more times along with all of the Grid.Row, Grid.Column definitions -->
</Grid>

ここで、グリッドに含まれるすべてのアイテムが Margin="3,1" VerticalContentAlignment="Left" VerticalAlignment="Center" を持つ必要があるとしましょう。これを実現するには、いくつかの方法があります。

  1. 各コントロールでプロパティを直接設定します-BAD!! スタイルのスキニングや集中化は許可されません。
  2. x:Key="MyStyleName" で Style を作成し、そのスタイルを各コントロールに適用します。ベター...スタイルの集中化とスキニングをより管理しやすくしますが、それでも大量のマークアップが必要であり、扱いにくくなる可能性があります。
  3. グローバル スタイルを作成します (つまり、x:Key を指定して TargetType={x:Type TextBox/TextBlock} を設定しないでください) - BAD!! これの問題は、明示的にオーバーライドしないアプリ内のすべてのコントロールに影響することです。これは、テキストブロックとテキストボックスを使用するメニュー、グリッド、およびその他のコントロールのようなものには不適切な場合があります。
  4. グリッドを対象とするスタイルを作成し、依存プロパティの値を Not bad のように明示的に設定します<Setter Property="Frameworkelement.Margin" Value="3,1" />...スタイルをコンテンツ内のすべての要素に正しく適用しますが、グリッド自体にも直接適用します...私が望むものではありません。

では、どのようなアプローチを採用し、その理由は何ですか? 何が一番効果的ですか?

4

4 に答える 4

5

グリッドのセクションに「グローバル」スタイルを配置して、Resourcesその影響を限定することができます。さまざまな場所で「グローバル」スタイルを再利用するには、それらをデフォルト以外のリソース ディクショナリに配置し、次のように含めますMergedDictionary

Styles.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="{x:Type ...}"> ... </Style>
</ResourceDictionary>

次の形式で:

<Grid>
   <Grid.ColumnDefinitions.../>
   <Grid.RowDefinitions.../>

    <Grid.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>

            <!-- other resources here -->

        </ResourceDictionary>
    </Grid.Resources>

    ...
</Grid>
于 2008-12-04T16:36:28.137 に答える
0

これをチェックしてください。

http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution/

私はそれらがLOBアプリにとって大きな助けになると思います。ソースが利用できるので、ライブラリを使用しなくても、グローバルなスタイル設定を行う方法を知ることができます。

于 2008-12-04T16:19:24.567 に答える
0

#4 を使用できますが、グリッド自体でこれらのプロパティを明示的にオーバーライドします。

于 2008-12-04T08:24:59.097 に答える
0

添付プロパティを使用して思いついたソリューションは次のとおりです。

コーディング コンテキストの記事

于 2008-12-11T02:44:08.357 に答える