4

リソースのスタイルを定義するユーザー コントロール UserControl1 があります。そのユーザー コントロールには、そのスタイルを参照する UserControl2 のインスタンスが含まれています。

<UserControl x:Class="UserControl1">
    <UserControl.Resources>
        <Style x:Key="MyStyle" />
    </UserControl.Resources>

    <Grid>
        <UserControl2 />
    </Grid>
</UserControl>

<UserControl x:Class="UserControl2">
    <Grid Style="{StaticResource MyStyle}">
    </Grid>
</UserControl>

ただし、UserControl2 は、(UserControl1 のリソース内の) 論理ツリーにある場合でも、そのスタイル リソースを見つけることができません。UserControl2 を取得して UserControl1 のリソースを見つけるにはどうすればよいですか?

4

2 に答える 2

1

あなたはそれを行うことができますが、ResourceDictionary代わりに使用することをお勧めします。

とにかく、この方法でそれを行いたい場合はFindAncestor、親を見つけて、親から必要なものにアクセスするためにResource使用できますResourceDictionary

<UserControl x:Class="UserControl1">
    <UserControl.Resources>
        <Style x:Key="MyStyle" />
    </UserControl.Resources>

    <Grid>
        <UserControl2 />
    </Grid>
</UserControl>

<UserControl x:Class="UserControl2">
    <Grid Style="{Binding Resources[MyStyle], RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}}">
    </Grid>
</UserControl>

Beacauseは、コードビハインドと同じようにResource使用してアクセスできる辞書です。key

于 2013-03-08T22:27:15.773 に答える
1

DynamicResource私は同じ問題を抱えていて、代わりにリソースを参照することで解決できましたStaticResource

<UserControl x:Class="UserControl2">
    <Grid Style="{DynamicResource MyStyle}">
    </Grid>
</UserControl>

コンパイラは、リソースを解決できないという警告を表示します。

于 2015-08-20T13:00:27.140 に答える