2009-08-31 12 views
2

固定リソースをruntineの間に変更することはできません。Silverlight:実行時に静的リソースのプロパティを変更する

私は単純な数字を表示するTextBoxを持っています。その後、私はラウンドのTextBoxになるためのTextBoxのテンプレートを変更し、スタイル、定義されています:あなたが見ることができるように

<Style x:Key="RoundNumberDisplay" TargetType="TextBox"> 
     <Setter Property="Width" Value="22"/> 
     <Setter Property="Height" Value="22"/> 

     <Setter Property="Template"> 
      <Setter.Value> 

        <ControlTemplate> 
         <Border x:Name="brd1" Width="20" Height="20" CornerRadius="15"> 
          <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" Text="1" FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" /> 
          <Border.Background> 
           <RadialGradientBrush GradientOrigin=".3, .3"> 
            <GradientStop Color="{StaticResource ColorBackground1}" Offset=".15"/> 
            <GradientStop Color="{StaticResource ColorForeground1}" Offset="1"/> 
           </RadialGradientBrush> 
          </Border.Background> 
         </Border> 
        </ControlTemplate> 

      </Setter.Value> 
     </Setter> 

    </Style> 

を、表示されたテキストは、「ハードワイヤード」のTextBlock「TXT1」です。明らかに、ランタイム中に番号を変更することはできません。

私の質問は今です:表示された番号を変更する最善の方法は何ですか?各番号のスタイルを作成することは、私にとっては少し効果がありません。実際にあなたが再利用このスタイルを複数回行う必要がありますので、事前に

おかげで、 フランク

答えて

2

ターゲットTextBoxからtxt1-Text-Propertyの値を設定できるようにするTemplateBinding。重要:ControlTemplateのターゲットタイプを設定する必要があります。

<Style ... 

        <ControlTemplate **TargetType="TextBox"**> 
          ... 

          <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" **Text="{TemplateBinding Text}"** FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" /> 
        </ControlTemplate> 
    </Style> 
0

スタイルは、コントロールの単なる外観です。純粋主義者は、スタイルの中に数字のようなデータ(あなたのアプリケーションコンテキストで何かを意味する必要があります)を含めてはいけないと言うかもしれません。あなたのスタイルを使用するときあなたが表示された番号を変更できます。その後も

<TextBox Style={StaticResource RoundNumberDisplay} x:Name="TextBoxOne" Text="1"/> 

を、あなたは(あなたがデータに使用何か)あなたのViewModelにテキストを結合して、そこから数を引くことを好むかもしれません。いずれかがOkです。

+0

私は、ターゲットのTextBoxのテキストプロパティを使用していないとしてではなく、テキストを表示するためにControlTemplateのTextBlockの「TXT1」のテキストプロパティ、テキストボックス」テキスト・プロパティの値が上書きされます。 TemplateBindingを使用して、ターゲットTextBoxからTextBlockにText-Valueを取得する必要があります(自分の自己回答参照) – Aaginor

関連する問題