1

WPF 问题。我不知道谷歌是为了什么。

我有一个用户控件:

<UserControl x:Class="MyProj.MyControl"
             x:Name="Self"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Button />
</UserControl>

我这样使用它:

<local:MyControl Background="Green" />

但背景似乎没有改变。这是因为按钮的背景没有改变。我希望按钮的背景使用用户控件的背景。

我想我可以这样做:

<UserControl x:Class="MyProj.MyControl"
             x:Name="Self"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Button Background="{Binding Path=Background, ElementName=Self" />
</UserControl>

但我非常希望从 Control 和 ContentControl 继承的所有属性都应用于按钮(ToolTip、BorderThickness、BorderBrush 等)。

那么我能做些什么来代替这个:

<UserControl x:Class="MyProj.MyControl"
             x:Name="Self"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Button Background="{Binding Path=Background, ElementName=Self"
            ToolTip="{Binding Path=ToolTip, ElementName=Self"
            BorderThickness="{Binding Path=BorderThickness, ElementName=Self"
            BorderBrush="{Binding Path=BorderBrush, ElementName=Self"
            ...
            ...
            ...
            ... />
</UserControl>

?

(注意:这是一个较小的(实际上是我可以管理的最小的)示例,它是一个较大的 UserControl,它承载了许多控件。)

4

1 回答 1

1

啊。好吧,简短的回答:你不能,至少不容易。XAML 不像 HTML/CSS 那样工作。默认情况下Button, ( 几乎所有Control) 不会从其容器中继承属性。

可以制作自己的Button, etc 控件来继承...或者,您可以声明Style适用于所有内容的 a 并尝试获取任何包含元素的属性(即 via RelativeSource FindAncestor)...或者您可以做您想做的事情在这里重新做:手动设置每个属性。

方法示例Style

<Style TargetType="{x:Type Control}">
    <Setter 
        Property="Background" 
        Value="{Binding (Control.Background), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}"/>
</Style>
于 2013-01-03T17:25:15.750 回答