5

ウィンドウからUserControl'DisplayHandler'内にあるUserControl'Display'に画像をバインドしようとしています。DisplayにはDependancyProperty'DisplayImage'があります。これはこれに似ていますが、彼らの答えは私の問題を助けませんでした。

DisplayHandlerには、プロパティ'DisplayImage'があり、BindingtoDisplayを渡す必要があります。ただし、Visual Studioでは、同じ名前のDependancyPropertyを2回登録することはできません。だから私はそれを二度登録せず、それを再利用することだけを試みました:

<my:DisplayHandler DisplayImage=
    "{Binding ElementName=ImageList, Path=SelectedItem.Image}" />

DisplayHandler

xaml

<my:Display x:Name="display1"/>

cs

public static readonly DependencyProperty DisplayImageProperty =
    myHWindowCtrl.DisplayImageProperty.AddOwner(typeof(DisplayHandler));

public HImage DisplayImage {
    get { return (HImage)GetValue(DisplayImageProperty); }
    set { SetValue(DisplayImageProperty, value); }
}
public HImage DisplayImage /*alternative*/ {
    get { return (HImage)display1.GetValue(Display.DisplayImageProperty); }
    set { display1.SetValue(Display.DisplayImageProperty, value); }
}

**2つのプロパティのどちらもうまくいきませんでした。*

画面

public HImage DisplayImage {
    get { return (HImage)GetValue(DisplayImageProperty); }
    set { SetValue(DisplayImageProperty, value); }
}
public static readonly DependencyProperty DisplayImageProperty =
    DependencyProperty.Register("DisplayImage", typeof(HImage), typeof(Display));

コントロールがツリーを上って、独自の値が定義されていない場合はそのプロパティを探すと思っていました。->参照

だからそれはどういうわけか動作するはずです...

ImageList(ImageListにはDisplayも含まれています)で機能したため、TemplatingとA ContentPresenterを試してみましたが、ListBoxItemのように値をバインドすることができませんでした。

4

1 に答える 1

5

ソリューションはAddOwner機能するはずですが、埋め込みコントロールを更新するPropertyChangedCallbackを追加する必要があります。

public partial class DisplayHandler : UserControl
{
    public static readonly DependencyProperty DisplayImageProperty =
        Display.DisplayImageProperty.AddOwner(typeof(DisplayHandler),
            new FrameworkPropertyMetadata(DisplayImagePropertyChanged));

    public HImage DisplayImage
    {
        get { return (Image)GetValue(DisplayImageProperty); }
        set { SetValue(DisplayImageProperty, value); }
    }

    private static void DisplayImagePropertyChanged(
        DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        var dh = obj as DisplayHandler;
        dh.display1.DisplayImage = e.NewValue as HImage;
    }
}
于 2013-01-11T14:03:43.303 に答える