2017-03-14 9 views
0

それぞれが画像で表されるRadioButtonの配列によって実現されるコントロールでWPFウィンドウを作成しようとしています。私はthis exampleで提供されるテンプレートを使用しましたので、テンプレートは以下のようになります。WPFのカスタムコントロール用のResourcesフォルダの画像

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="RadioButton"> 
      <Border BorderThickness="{TemplateBinding BorderThickness}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          Background="Transparent" 
          CornerRadius="20">          
       <Image Source="{Binding Path=Content, 
           RelativeSource={RelativeSource TemplatedParent}}"/> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

今の問題は、制御上の画像を設定するために、私は絵の全体のパスを記述する必要があり、ということです、その

<RadioButton Name="radioButtonNo" Checked="radioButton_Checked" 
     Content="C:\Myfolder\MyProject\Resources\MyPic0.png" 
     Style="{StaticResource Flag}" Width="75"/> 

のように当然のことながら、私は

<RadioButton Name="radioButtonNo" Checked="radioButton_Checked" 
     Content="MyPic0.png" 
     Style="{StaticResource Flag}" Width="75"/> 

ような何かを書くことができるようにしたいと思いますが、私はこれを行うとき、私が得るすべてはのようにファイル名を持つ標準のRadioButtonです キャプション。私は間違って何をしていますか?

答えて

1

WPFの画像リソースは通常、アセンブリのリソースファイルとして管理されていることに注意してください

<RadioButton Content="Resources/MyPic0.png" .../> 

のように、正しい相対パスを提供するのに十分でなければなりません。ビルドアクションはResourceに設定され、それらはResource File Pack URIsによって参照されます。 XAMLパーサーは、不足しているpack://application:,,,/という接頭辞を自動的に追加します。


あなたにも明示のControlTemplateでのImageコントロールのSourceプロパティに割り当てられているImageSourceはインスタンスを作成することがあります。

<RadioButton ...> 
    <RadioButton.Content> 
     <BitmapImage UriSource="Resources/MyPic0.png"/> 
    </RadioButton.Content> 
</RadioButton> 

または明示的に書かれたパックURIを持つ:

<RadioButton ...> 
    <RadioButton.Content> 
     <BitmapImage UriSource="pack://application:,,,/Resources/MyPic0.png"/> 
    </RadioButton.Content> 
</RadioButton> 
+0

まあ、私は 'Content = "Resources/MyPic0.png"とさまざまな長さのパスを試して、手動でプレフィックスを追加しました。私の場合はうまくいかなかった。 UriSourceを指定しようとすると(どちらの方法でも提案されているように)、完全なパスをキャプションとして持つ標準のRadioButtonが作成されました。 –

+0

イメージファイルは、Visual Studioプロジェクトの "Resources"という名前のフォルダにある必要があります。ビルドアクションはリソースでなければなりません。もちろん、他のフォルダ名やフォルダ構造を使用することもできます。 "Images/MyPic0.jpg" – Clemens

+0

ファイルがあります。最初にプロジェクト内のリソースにドラッグアンドドロップします。ソリューションエクスプローラのリソースフォルダを参照してください。 「Content =」を使わずに、コントロール用のイメージを直接指定すると、リソースを書く必要もなく、すべてが完璧に動作するので、私にとっては奇妙に見えます。しかし、これらのカスタムRadioButtonでは失敗します。 –

関連する問題