Установить стиль для пользовательского управления

Я пытаюсь установить стиль для своего пользовательского элемента управления. UserControl находится в проекте «Элементы управления», а тема — в проекте «MainProject».

<UserControl x:Class="Controls.OutputPanel"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        mc:Ignorable="d" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        x:Name="OutputControl"> 
   <!-- Style="{DynamicResource UserControlStyle}"> - I cant set the style here because the Resource Dictionary hasn't been defined yet -->

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MainProject;component/Themes/MyTheme.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>

    <!-- Now that the Resource Dictionary has been defined I need to set the style -->      

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <TextBox x:Name="textbox" 
                   ScrollViewer.VerticalScrollBarVisibility="Visible"
                   Text="{Binding ElementName=OutputControl, Path=TextProperty}"
                   IsReadOnly="True"
                   Style="{DynamicResource OutputTextBoxStyle}"/>

    </Grid>

</UserControl>

person Eamonn McEvoy    schedule 01.03.2011    source источник
comment
По моему опыту, лучше всего загрузить словарь ресурсов в файле resources. Это делает его доступным при запуске приложения.   -  person jjrdk    schedule 01.03.2011
comment
проект представляет собой UserControlLibrary, поэтому для этого нет файла App.xaml   -  person Eamonn McEvoy    schedule 01.03.2011


Ответы (2)


Это должно работать нормально, насколько я вижу. Получаете ли вы какие-либо специальные предупреждения или ошибки, или некоторые части стиля не применяются?

Чтобы установить стиль после того, как Resources был установлен, вы можете использовать следующий синтаксис

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MainProject;component/Themes/MyTheme.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<UserControl.Style>
    <DynamicResource ResourceKey="UserControlStyle"/>
</UserControl.Style>

Если после этого у вас все еще возникают проблемы, вы можете сравнить его с моим примером приложения, которое я загрузил здесь: http://www.mediafire.com/?q1v98huubzw02zb

person Fredrik Hedblad    schedule 01.03.2011
comment
Большое спасибо, посмотрел на ваш пример и все заработало :) - person Eamonn McEvoy; 01.03.2011

Вы можете создать новый словарь ресурсов, определить там свой стиль и добавить его в ресурсы приложения.

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:UC="clr-namespace:UserControls;assembly=UserControls">
   <Grid>
      <UC:myUserControl/>
   </Grid>
</Window>


<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:UC="clr-namespace:UserControls;assembly=UserControls">

    <Style TargetType="UC:myUserControl">
       ...
    </Style>
</ResourceDictionary>

А также

person Velja Matic    schedule 01.03.2011