2

我有一个 UserControl(复合控件),可以显示为以下伪 XAML 代码:

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

我在很多地方使用这个自定义控件,并使用 WPF 样式设置其中一些样式。此样式将 UserControl 的 Background 属性设置为一种颜色。但是这个背景颜色是在 UserControl 的背景表面上绘制的,但我希望它只在 TextBox 控件的背景上绘制。这就是我得到的(颜色=红色):

替代文字 http://img261.imageshack.us/img261/8600/62858047wi3.png

如果我将 UserControl 的 Background 属性绑定到我的 TextBox 控件的 background 属性,我会得到以下内容:

替代文字 http://img111.imageshack.us/img111/1637/30765795kw5.png

现在它还绘制了内部 TextBox 控件的背景,但 UserControl 的背景颜色仍然存在。有什么方法可以删除 UserControl 的背景画吗?

4

2 回答 2

5

有很多方法可以做到这一点,但我建议在您的用户控件上公开您自己的属性并绑定到您的用户控件内部。例如:

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

另一种方法是明确地将背景颜色设置TextBox为某物。

于 2008-10-07T13:25:48.183 回答
1

我同意肯特的观点。有多种方法可以解决此问题。

但是只使用 UserControl 中的 Style 来设置 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 的背景确实是您想要做出不同的东西。

<UserControl x:Name="_root" ...>
    <TextBox Background="{Binding TextBoxBackground, ElementName=_root}"/>
    <Button/>
</UserControl>
于 2008-10-07T14:16:56.770 回答