2

私の要件は、次の状況のテキストボックスに複数のスタイルを適用することです:

  1. 「 Generic.xaml」と言う別のファイルに1 つのスタイル (例: MyTextStyle ) があります。
  2. 私のテキストボックスはABC.xamlにあります
  3. この Textbox にいくつかのトリガーを適用したいので、 Textbox.Style を使用する必要があります
  4. 「 MyTextStyle」も適用したい

以下を実行すると、DynamicResource を BasedOn に適用できないというエラーが表示されます。

<TextBox.Style>
                    <Style BasedOn="{DynamicResource MyTextStyle}" TargetType="{x:Type TextBox}">
                        <Setter Property="Text" Value="{Binding SelectedCall.Name}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding SelectedCall.Name}" Value="N/A">
                                <Setter Property="Text" Value="" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBox.Style>

このダイナミックリソースとデータトリガースタイルを適用できるように、解決策を提案してください

4

1 に答える 1

8

次のように変更DynamicResourceStaticResourceます。

<Style BasedOn="{StaticResource MyTextStyle}" TargetType="{x:Type TextBox}">

DynamicResource は、BasedOn では意図的に許可されていません。

編集: アプリケーションがこの特定の静的リソースを見つけることができないため、「「EmptyTextBoxStyle」という名前のリソースが見つかりません」というメッセージが表示されます。アプリケーションがそれを見つけられるようにするには、MergedDictionary を使用する必要があります。たとえば、ウィンドウ内で使用する方法の例を次に示します。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

別の ResourceDictionary 内では、これを次のように使用する必要があります。

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>

このように、EmptyTextBoxStyle スタイルの定義を含む ResourceDictionary を参照する必要があります。たとえば、'EmptyTextBoxStyle' が Generic.xaml ファイルで宣言されていて、それを ABC.xaml で使用している場合、上記の XAML を使用できます (もちろん、プロジェクト構造に従って Source 属性を更新する必要があります)。

于 2012-09-11T13:21:43.583 に答える