2009-03-31 20 views
3

メニューを含むUserControlがあります。 MenuControlをUserControlのプロパティにバインドする必要がありますが、機能していません。WPF - メニューアイコンへのバインド

コードは次のように起動します -

 <Border Grid.Row="0">    
     <DockPanel> 
      <Image x:Name="testImage" Height="16" Width="16" Source="{Binding ElementName=UC,Path=AddImage}"/> 
      <Menu DockPanel.Dock="Left" Height="20" 
       VerticalAlignment="Center"> 
       <MenuItem Header="{Binding ElementName=UC,Path=AddText}"> 
        <MenuItem.Icon> 
         <!--<Image x:Name="workswhenin" Height="16" Width="16" Source="pack://application:,,/Kowdox;component/Images/UserIcons/user_add.png"/>--> 

         <Image x:Name="realImage" Height="16" Width="16" 
         Source="{Binding ElementName=UC,Path=AddImage}"/> 
        </MenuItem.Icon> 
       </MenuItem> 

(testImage)宣言あなたが見る最初の画像は、私はバインディングが正しいことを幸せ完璧そうに動作します。 2番目の画像(コメントアウトされ、名前が 'workswhenin')には、UserControlsバインドされたプロパティに渡しているパックURIが含まれていますが、それも動作しますが、3番目の画像(realImage)はまったく表示されません。

なぜ機能しないのかわかりません。拘束力があり、マークアップ内のイメージの配置が良好であることを知っています。何が起こっているのですか?

ご協力いただきますようお願い申し上げます。 ありがとうございます。

答えて

5

私はあなたのコードを見ることができないので、確かにわかりませんが、私は問題の内容を知っていると確信しています。

Image.Sourceは、タイプImageSourceのオブジェクトを想定しています。 XAMLでURLを指定すると、デフォルトのWPFコンバーターがURLをImageSourceオブジェクトに変換するために使用されます。バインディングを使用しているため、既定のコンバータは使用されません。したがって、画像ソースをImageSourceオブジェクトの代わりにURL値に設定しようとしている可能性があります。

コードビハインドプロパティでは、ImageSourceオブジェクトを作成する必要があります。これは本当に苦痛です。 BitmapImageを作成し、URLを渡すことができます。

最も簡単な解決策は、バインドするコードビハインドプロパティでMicrosoftの既定のコンバータを使用するか、またはバインドで明示的に使用することです。コンバータはImageSourceConverterと呼ばれます。

EDIT:

コード結合源の内部:

public ImageSource AddImageSource 
{ 
    get 
    { 
     ImageSourceConverter imgConv = new ImageSourceConverter(); 
     return imgConv.ConvertFrom(this.AddImage); 
    } 
} 

更新バインディング代わりAddImageプロパティのこのプロパティをターゲットとする

ここでは簡単な例です。 AddImageプロパティが変更されたときにもこのプロパティのPropertyChangedイベントが発生することを確認してください。

テストシナリオを作成する時間がかかりませんでしたが、問題なく動作するはずです。

+0

この質問はちょうど1000回目に見られましたが、あなたは(有用で正しい)回答は1つのupvoteを取得します。人々は本当に答えを見つけたらもっと投票を使うべきです。 – Stimul8d

+0

@Josh G:はい、サンプルコードを投稿してください。 – kevinarpe

+0

@KCArpe:完了。編集を参照してください。 –

関連する問題