2

テンプレートを使用することでメリットが得られると思う非常に単純なケースがあります(ただし、よくわかりません。そのため、質問しています)。私が見たすべてのテンプレートの例は、私が持っているよりも多くの知識を前提としている、私のような完全な初心者にはあまり役に立たないほど具体的である、またはテンプレートの一部を特定するのを困難にする多くの補助的なものを含んでいます。

設定は次のとおりです。2つのラベルを並べて表示します。最初のラベルにはフィールドの名前が入力され、2番目のラベルにはフィールドの値が入力されています。

これが私が現在私のアプリに持っているXAMLです(多くの場合、何度も):

<StackPanel Style="{StaticResource horizontalStackerStyle}">
    <Label Style="{StaticResource labelStyle}">Field One:</Label>
    <Label Style="{StaticResource valueStyle}" Name="field1" 
        Content="{Binding dataObject.field1}" />
</StackPanel>

次のようなXAMLを記述できるようなテンプレートを作成したいと思います。

<CustomControlOrWhatever 
    FieldName="Field One:" 
    FieldValue="{Binding dataObject.field1}"/>

ある種のテンプレートでこれができる気がします。その利点の1つは、スタイルを何度も指定し続ける必要がないことです。私は正しいですか?どうすればいいですか?

前もって感謝します!

アップデート:

これに対する答えはまだ見つかりません。依存関係プロパティを使用して可能な解決策を選択し、ここで明確な質問をしようとしました。さて、最初のレスポンダーは、DPナンセンスでコードを実際に乱雑にする必要はないと言ったので、もう一度変更しましたが、それでも機能しません。誰かが実用的な解決策を思い付くことができますか?これはとても単純なはずのようです。

明確にするために、これは、値が数秒ごとに更新される一方向のバインディングである必要があります。

4

3 に答える 3

2

あなたが求めているのは、基本的にユーザーコントロールです。

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SomeNameSpace.SomeControlName">
    <Grid x:Name="LayoutRoot">
     <StackPanel Style="{StaticResource horizontalStackerStyle}">
      <Label Style="{StaticResource labelStyle}" x:Name="FieldNameLbl"></Label>
      <Label Style="{StaticResource valueStyle}" x:Name="ValueLbl">
      </StackPanel>
    </Grid>
</UserControl>

コード ビハインドでは、コントロールの値を設定する 2 つのプロパティを公開する必要があります。

public string FieldName
{
    get { return FieldNameLbl.Text; }
    set { FieldNameLbl.Text = value; }
}

public string FieldValue
{
    get { return ValueLbl.Text; }
    set { ValueLbl.Text = value; }
}

そして、これを呼び出して、残りの宣言とともにウィンドウ/ページの上部に配置できます。

xmlns:Controls="clr-namespace:SomeNameSpace" 

次に、次のようにコントロールをウィンドウ/ページに挿入できます。

<Controls:NameOfYourControl FieldName="Field One:" FieldValue="{Binding dataObject.field1}"/>
于 2009-07-17T14:48:02.803 に答える
1

UserControl呼び出された を作成し、および のFieldControlバッキング (自動) プロパティを定義FieldNameできますFieldValue。(バインドが 1 回だけ必要な場合は、通常のプロパティで問題ありません。おそらくそうです。)

XAML コードは次のようになります。

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="foo.bar">
    <StackPanel Style="{StaticResource horizontalStackerStyle}">
        <Label Style="{StaticResource labelStyle}" Content="{Binding Path=FieldName, Mode=OneTime, StringFormat='{0}: '}"/>
        <Label Style="{StaticResource valueStyle}" Content="{Binding Path=FieldValue, Mode=OneTime}" />
    </StackPanel>
</UserControl>

それが役立つことを願っています。

于 2009-07-17T14:48:14.737 に答える
0

やりたいことは、 のようにパスを指定する簡単な方法でボタンに画像を配置することについての議論に似ています<Button MyImage="foo.jpg" />。実際の詳細については、この記事に従ってください。

要約する:

  • 明白な方法の 1 つは、2 つのラベルを含み、2 つのプロパティを公開する UserControl を作成することです。ここではあまりテンプレート化していません。

  • ほとんどの WPFish ソリューションは、ラベルの 1 つ (値など) で 2 つの添付プロパティを使用し、もう 1 つのラベル (説明) を含むコントロール テンプレートを提供することです。テンプレートでは、各ラベル テキストを対応する添付プロパティの値にバインドします。

于 2009-07-17T14:48:52.037 に答える