2010-11-18 13 views
2

DataContextに基づいて画像のソースをChildWindowに設定したいとします。ここでXAMLファイルは次のとおりです。私はChildWindowShowメソッドをオーバーライドして、画像のソースに設定した場合は正常に動作していますシルバーライトでのダイナミック画像ソースバインディング

<controls:ChildWindow x:Class="CEM.Controls.DialogWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Title="{Binding Title}"> 
    ... 
    <Image x:Name="DialogIcon"></Image> 
    ... 
</controls:ChildWindow> 

public new void Show() 
{ 
    DialogIcon.Source = new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative)); 
    base.Show(); 
} 

をしかし、それは醜い、それは「Silverlightの道」ではありませんので、私は変更することを決定した:

<Image x:Name="DialogIcon" Source="{Binding DialogIconType, Converter={StaticResource DialogIconConverter}}"></Image> 

あなたは、私がDataContextからソースをバインドするために、登録さDialogIconConverterを持っている参照してください。

public class DialogIconConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     //currently it's an hard-coded path 
     return new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative)); 
    } 
    ... 
} 

しかし、今はうまくいきません。私は、このコントロールにいくつかのコンバーターがあり、うまく動作しています。これだけが動作していません。あなたはどこに問題があるのか​​を見つけるのを助けることができますか?

EDIT:DialogIconTypeはenumであり、またDialogContextのプロパティです。 DialogContextのインスタンスはのDataContextプロパティに割り当てられます。以下に示すようDialogIconTypeが、それはvalueconverterせずに動作するはずですが、あなたの画像(例えば "画像/ダイアログウィンドウ/ Confirm.png")へのパスであると仮定すると

public enum DialogIconType 
{ 
    Confirm, 
    Alert, 
    Error 
} 
public class DialogContext 
{ 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public DialogButtons Buttons { get; set; } 
    public DialogIconType IconType { get; set; } 
} 
internal DialogWindow(DialogContext context) 
{ 
    InitializeComponent(); 
    this.DataContext = context; 
} 
+0

...私の編集:-)を参照してください –

+0

"/Images/DialogWindow/Confirm.png"の代わりに "Images/DialogWindow/Confirm.png"を使ってみましたか? –

+0

@ヤコブ:試しても働かない。 –

答えて

1

は愚かなことかもしれませんが、あなたはあなたのコンバータは、あなたのXAMLファイルに正しく参照されていることを確認したのですか?

そうでない場合、私は(資源などの画像の設定で)あなたのURIのパスとして、この構文をしようと提案する:

return new BitmapImage(new Uri("pack://application:,,,/Images/DialogWindow/Confirm.png", UriKind.Relative)); 

EDIT:

[OK]を、私はそれを持っていると思う: あなたの出力ウィンドウを見て、あなたはおそらくいくつかのエラー40バインディングを参照してください... blablabla ...

私の推測では、コンバータは正しいが、バインディングのソースはないので、基本的にコンバータはnそれでも使用されます。

あなたのDialogIconTypeは依存性プロパティではないため、バインドできません。

つまり

、この:

public DialogIconType IconType { get; set; } 

このになる必要があります。

public static DependencyProperty IconTypeProperty = DependencyProperty.Register("IconType", typeof(DialogIconType), typeof(DialogContext)); 
public DialogIconType IconType 
{ 
    get { return (DialogIconType)(GetValue(IconTypeProperty)); } 
    set { SetValue(IconTypeProperty , value); } 
} 

プラス、あなたのXAMLで、あなたは "IconType" に結合し、べきではない "DialogIconType"(これは

(これは唯一の問題でもありますが、dependencyPropertyが実際に本当に必要かどうかはわかりませんが、今度は私が考えている)

+0

'App.xaml'で正しく参照されていますが、他のコンバータもあります。 –

+0

@ダニー:私はあなたに関係していたいくつかのリフレクションで編集しました – David

+0

それはタイプミスです!私は 'DialogIconType'を' IconType'に変更する必要があります!ありがとう! –

2

<Image Source="{Binding DialogIconType}" /> 

EDIT: valueconverterのConvert方法からイメージへのパスを返す

も可能である - すなわち:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return "Images/DialogWindow/Confirm.png"; 
} 

EDIT 2:

次のようにもUriKind.Relativeを使用して動作します:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return new BitmapImage(new Uri("Images/DialogWindow/Confirm.png", UriKind.Relative)); 
} 
+0

@Jakob:私の編集を参照してください。 –

+0

@ダニーチェン:...と私の編集を参照してください:-) –

+0

@ヤコブ:動作していません。なぜなら 'Image'の' Source'プロパティは 'ImageSource'型であり、' string'型ではないからです。 'Image'クラスに' SourceProperty'という名前の 'DependencyProperty'があるので、XAMLの文字列値を' Source'プロパティに代入することができます。これは 'ImageSource'に変換されるからです。しかし、独自の 'Converter'を実装する場合は、正確な型を返さなければなりません。 –

関連する問題