Передайте значение свойства зависимости UserControl в элемент управления внутри него - PullRequest
2 голосов
/ 07 октября 2008

У меня есть UserControl (элемент управления Composite), который может отображаться как следующий псевдо-код XAML:

<UserControl>
  <DockPanel>
    <TextBox />
    <Button />
  </DockPanel>
</UserControl>

Я использую этот пользовательский элемент управления в нескольких местах и ​​стилизую некоторые из них в стиле WPF. Этот стиль устанавливает цвет фона свойства UserControl. Но этот цвет фона рисуется на поверхности фона UserControl, но я хочу, чтобы он рисовался только на фоне элемента управления TextBox. Вот что я получаю (Цвет = Красный):

альтернативный текст http://img261.imageshack.us/img261/8600/62858047wi3.png

Если я связываю свойство Background элемента UserControl со свойством background моего элемента управления TextBox, я получаю следующее:

альтернативный текст http://img111.imageshack.us/img111/1637/30765795kw5.png

Теперь он также рисует фон внутреннего элемента управления TextBox, но цвет фона UserControl все еще существует. Есть ли какие-нибудь способы удалить эту картину фона UserControl?

Ответы [ 2 ]

5 голосов
/ 07 октября 2008

Есть несколько способов сделать это, но я бы посоветовал выставить свое собственное свойство на свой пользовательский элемент управления и связать его со своим пользовательским элементом управления. Например:

<UserControl x:Name="_root" ...>
    ...
    <Button Background="{Binding ButtonBackground, ElementName=_root}"/>
</UserControl>

Другим способом было бы просто явно установить цвет фона TextBox.

1 голос
/ 07 октября 2008

Я согласен с Кентом. Существует несколько способов решения этой проблемы.

А как насчет использования стиля в UserControl для установки фона TextBox? Есть ли какая-то особая причина, по которой следующее не будет работать для вас?

<UserControl
    x:Class="StackOverflowQuestion.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300"
    Width="300"
>
    <UserControl.Resources>
        <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </UserControl.Resources>
    <DockPanel>
        <TextBox Text="Test" Style="{StaticResource textBoxStyle}"/>
        <Button/>
    </DockPanel>
</UserControl>

Если вы действительно хотите использовать набор свойств в пользовательском элементе управления и иметь его влияние на внутренние элементы пользовательского элемента управления, я бы последовал предложению Кента с одной модификацией. Вместо этого я бы связал фон TextBox, чтобы любая фоновая кисть, заданная пользователем в пользовательском элементе управления, передавалась (наследование значений свойств) кнопке. Или, другими словами, фон TextBox - это то, что вы пытаетесь изменить.

<UserControl x:Name="_root" ...>
    <TextBox Background="{Binding TextBoxBackground, ElementName=_root}"/>
    <Button/>
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...