Как изменить свойство источника изображения, расположенное в ResourceDictionary, с помощью MainWindow XAML - PullRequest
0 голосов
/ 10 апреля 2020

Цель: Изменить свойство источника изображения, расположенное в ResourceDictionary, на MainWindow.xaml

Я использую этот шаблон для большего количества текстовых полей, затем мне нужно изменить изображение шаблона. потому что разные текстовые поля имеют разные значки.

Это XAML TextBoxDictionary с моим ресурсом:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Testing.ResourceDictionary">
    <Style x:Key="txt" TargetType="TextBox">
        <Setter Property="Width" Value="300"/>
        <Setter Property="Height" Value="80"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Border x:Name="b" BorderBrush="Black" BorderThickness="2" Background="Transparent" Padding="5">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Grid Grid.Column="0">
                            <Image x:Name="SearchIcon" Stretch="Fill" Width="40" Height="40" HorizontalAlignment="Left" VerticalAlignment="Center" Source="/ResourcesIcons/Password.png"/>                    
                            </Grid>
                            <Grid Grid.Column="1">
                                <ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center" HorizontalAlignment="Left"></ScrollViewer>
                            </Grid>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>                        
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="b" Property="Background" Value="Red"></Setter>
                        </Trigger>
                        <Trigger Property="IsKeyboardFocusWithin" Value="True">                            
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">                           
                            <Setter Property="Focusable" Value="True"></Setter>
                        </Trigger>                    
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Здесь мой XAML MainWindow, где я хочу использовать вышеуказанный шаблон и загрузить его:

<Window x:Class="Testing.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        
        xmlns:local="clr-namespace:Testing"       
        mc:Ignorable="d"        
        Title="MainWindow" 
        Height="450" 
        Width="800">
    <Grid>

        <TextBox Name="text" Style="{StaticResource txt}" />

    </Grid>
</Window>

Here My App XAML:

<Application x:Class="Testing.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Testing"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>               
                <ResourceDictionary Source="ResourceDictionary/TextBoxDictionary.xaml"></ResourceDictionary>                
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

...