2009-08-05 7 views
1

私はWPFの新機能ですので、私にご負担ください。WPFは、実行時にC#コードのボタンの画像を設定します。

基本的に私は次のように画像でボタンを表示するWPFユーザーコントロールにスタイルを定義している:

<UserControl.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> 
         <Image Width="16" Height="16" Stretch="UniformToFill"/> 
         <ContentPresenter/> 
        </TextBlock> 
       </ControlTemplate> 
      </Setter.Value> 

     </Setter> 
    </Style> 
</UserControl.Resources> 

私は、実行時にグリッドにボタンの負荷を追加します(それが実行時になければなりませんボタンの数と種類が動的なので)。

私がしたいのは、実行時にボタンのイメージを設定することです。私はいくつかの方法を試しましたが、うまくいかないようです。 Xamlでソースを設定するとうまく動作します。次のように私がしようとしているコードがある:私は推測した場合

Button b = new Button(); 
// Create source. 
BitmapImage bi = new BitmapImage(); 
bi.BeginInit(); 
bi.UriSource = new Uri(@"C:\SourceCode\DSA\DSALibrary\Icons\money.png"); 
bi.EndInit(); 

b.SetValue(Image.SourceProperty, bi); 

誰も私が間違っているつもりだどこに向けて私を指すでした、私は値を設定していると思うところだと思います、I実際はそうではありません。

乾杯

+0

出来上がりら'b'ですか?あなたのUserControlはボタンを派生しましたか? –

+0

問題はボタンがイメージではないということです。そして、bボタンで奇妙なプロパティを設定しようとしています。ボタンのコンテンツにビットマップを設定し、データテンプレートを使用することができます(回答参照) – Arcturus

+0

編集するB. @Arcturus、私はそれが問題かもしれないと思ったが、私はちょうど、それを設定するつもりはない、もしdatatemplatesが行く方法、非常にありがとう。 – MrEdmundo

答えて

3

ボタンのContentプロパティを使用しようとすると、コンテンツを処理するためのDataTemplateを宣言することができます。

<UserControl.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Image Width="16" Height="16" Stretch="UniformToFill" Source="{Binding}"/> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="My button text" /> 
        </StackPanel> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <ContentPresenter/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</UserControl.Resources> 

があなたのボタンの内容についてのBitmapImageを設定し、:)どのようなタイプ

+0

OK ...私はあなたと一緒です。私はまだ拘束されていないことを認めなければならない。あなたは "{Binding}"の定義方法の方向を教えてください。ありがとう – MrEdmundo

+0

ちょっと一言、上の例でボタンのテキストがどのように設定されているのかわかりません。 – MrEdmundo

+0

Content on Buttonを設定すると、ContentControl(Button)はインターンのContentPresenterを使用します。 ContentPresenterは、コンテンツをそのデータソースとして設定します。 DataSourceプロパティは、直接バインディングを決定するプロパティです。だから{Binding}はDataSourceへのバインディングを作成します。これはBitmapイメージであるContent ....... – Arcturus

0

は、あなたはそれはあなたが作成しているSystem.Windows.Controls.UserControl派生物だということを確認することはできますか?

私の推測では、コントロールを作成したときにビットマップが読み込まれて、イメージソースプロパティが捕捉されないように設定されていると思います。 2段目の作成でプログラムでボタンを作成し、2段目を行う前にボタンを設定しようとしましたか?

ボタンのInvalidate()関数を呼び出して再描画を試みることができます。

関連する問題