3

XAML のリソースにバインドするプロパティを持つユーザー コントロールがある場合、通常、コントロールまたはコントロールを含むウィンドウにそのバインドを設定します。例えば:

<local:MyNeatControl MyProperty="{StaticResource ...}" />

これにより、MyNeatControl オブジェクトのインスタンスの MyProperty プロパティが親コントロールのリソースに設定されます。

しかし、ウィンドウがあり、そのプロパティの 1 つを独自のリソースの 1 つにバインドしたい場合はどうすればよいでしょうか? コードで行うのは簡単です:

public MainWindow()
{
    this.Loaded += new RoutedEventHandler(this.MainWindow_Loaded);
    ...
}

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.MyProperty = this.Resources["MyProperty"] as MyProperty;
    ...
}

しかし、これは私を悩ませます。コードでプロパティを設定するよりも、XAML でプロパティをバインドしたいと思います。

どうすればいいのですか?MyProperty 宣言を属性として要素に追加しようとしました。しかし、私はエラーが発生します:

The property 'MyProperty' was not found in type 'Window'.

私が見逃している簡単なものはありますか?

4

2 に答える 2

2

DynamicResourceの代わりに使ってみてくださいStaticResource

例:

<Window x:Class="BindingToOwnResources.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="{DynamicResource WindowWidth}">
    <Window.Resources>
        <System:Double x:Key="WindowWidth">300</System:Double>
    </Window.Resources>
    <Grid>

    </Grid>
</Window>
于 2012-10-30T08:10:53.923 に答える
1

基本的な問題はデータ型です。

XAML ファイル内で子要素を宣言すると、その子の宣言にはその子の型が含まれます。これは MyNeatControl 型のオブジェクトを宣言し、その宣言内で、その型のプロパティにアクセスできます。

<local:MyNeatControl MyProperty="{StaticResource ...}" />

しかし、ウィンドウであれコントロールであれ、型を宣言するとき、XAML ファイル内のオブジェクトの型は、その親の型です。これは、MyWindowBase から継承する MyWindow クラスを定義しますが、XAML 内では、スコープ内の型は MyWindow ではなくMyWindowBase です。

<local:MyWindowBase
        x:Class="MyProject.MyWindow"
        ....
        >
    <local:MyWindowBase.Resources>
        ...
    </local:MyWindowBase.Resources>
    ...
</local:MyWindowBase>

じゃあ何をすればいいの?問題を回避します。スタイルを使用する:

<local:MyWindowBase>
    <Style TargetType="local:MyWindow">
        <Setter Property="MyProperty" Value="{StaticResource ..}" />
    </Style>
</local:MyWindowBase>

これにより、MyWindow の「MyProperty」プロパティが特定のリソースに設定されます。

于 2012-10-31T18:11:53.680 に答える