Проблема с применением стиля в WPF UserControl - PullRequest
5 голосов
/ 19 сентября 2011

У меня есть пользовательский элемент управления, и я хочу использовать его в каком-то другом проекте.Нет проблем, когда я устанавливаю какое-то значение для его свойств напрямую:

<local:MyUserControl prop1="val1" prop2="val2">
    ...
</local:MyUserControl>

Но я не могу применить стиль к нему.Я попробовал:

<Window ...>
    <Window.Resources>
        <Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}">
            <Setter Property="prop1" Value="val1"/>
            <Setter Property="prop2" Value="val2"/>
        </Style>
    </Window.Resources>

    <Grid>
        <local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}">
            ...
        </local:MyUserControl>
    </Grid>
</Window>

Где я ошибся?-Спасибо

Ответы [ 2 ]

5 голосов
/ 21 сентября 2011

Используя дорогие инструкции @Mario Vernari, я обнаружил, что проблема была в плохой стратегии, которую я использовал для создания своего UserControl. Я хотел создать UserControl, который мог бы содержать некоторые другие. Итак, я попробовал это:

<UserControl x:Class="MyNamespace.MyUserControl"
             ...
             Style="{DynamicResource ResourceKey=MyUserControlStyle}">
    <UserControl.Resources>
        ...
        <Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type UserControl}">
                        <Border BorderBrush="{Binding Path=DP1}">
                            ...
                            <ContentPresenter ... Content="{TemplateBinding Content}"/>
                            ...
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
</UserControl>

Где DP1 - свойство зависимости типа Brush. UserControl, созданный этим способом, работает, если вы устанавливаете его свойства (например, DP1) напрямую. Абсолютно, это не верный путь, как @Mario сказал мне:

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

И добавил:

Вместо этого вы должны использовать CustomControl; Определите стиль по умолчанию в папке Themes (если у вас есть обычная Visual Studio, она создается автоматически). После этого вы можете переопределить стиль по умолчанию в вашем собственном приложении. Точно так же, как и для обычного базового класса и его производного.

Следуйте этому: http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

Очевидно, что в этом случае нам нужно получить наш элемент управления без учета класса ContentControl (вместо Control класса). Вы можете взглянуть на это & это , чтобы освоить детали.

Здесь я снова благодарю @Mario. ;)

0 голосов
/ 19 сентября 2011

Вы даете Style="{StaticResource ResourceKey=MyUserControlStyle}".

Это просто - Style="{StaticResource MyUserControlStyle}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...