所以我意识到我的图形查看器的轴显示在图形中的实际项目上,因此我更改了网格上的ZIndex以显示轴上的项目。
然而,我注意到我实际上看不到任何物品,因为物品的背景是不透明的。我想我有两个选项,要么将项目的背景设置为透明,要么设置项目的不透明度。这两个选项有什么区别吗?
<Grid
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ZIndex="1"
>
<Components:SignalGraphAxis
x:Name="signal_axis"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
GraphHeight="{Binding Path=GraphHeight}"
PenColor="{Binding Path=AxisColor, Mode=OneWay}"
PenWidth="{Binding Path=GraphPenWidth, Mode=OneWay}"
MinHeight="10"
MinWidth="10"
AxisTimeScale="{Binding Path=GraphTimeScale}"
NumberOfPixelsPerDivision="{Binding Path=NumberOfPixelsPerDivision, Mode=OneWay}"
MinDisplayValue ="{Binding Path=MinDisplayValue, Mode=OneWay}"
UnitsOfGraphTimePerInch="{Binding Path=UnitsOfTimePerInch, Mode=OneWay}"
/>
</Grid>
<ScrollViewer
x:Name="signal_scrollviewer"
Grid.Row="1"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.ZIndex="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible"
CanContentScroll="True"
Style="{StaticResource SignalScrollViewerStyle}"
>
<ItemsPresenter />
</ScrollViewer>
</Grid>
答案 0 :(得分:3)
Background
属性在Control
上定义,Opacity
在UIElement
上定义得更高。
来自MSDN网页Control.Background Property
此属性仅影响其模板使用的控件 背景属性作为参数。在其他控件上,此属性 没有影响。
让我们尝试创建一个自定义控件,看看它是如何工作的。
<强> CustomControl1.cs 强>
public class CustomControl1 : ContentControl
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}
CustomControl1的默认模板
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="My Custom Control " Grid.Row="0" />
<ContentPresenter Grid.Row="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
请注意,上面的模板完全不使用Background
中的Template
属性。
现在,让我们尝试在表单中使用它,看看它的行为:
来自Window1.xaml的代码
<Grid>
<wpfApplication5:CustomControl1 Background="Green">
<Button Content="Button Within Custom Control" Margin="25"/>
</wpfApplication5:CustomControl1>
</Grid>
结果输出:
请参阅,即使我们在Window1.xaml中将Background
设置为Green
,渲染的CustomControl也没有绿色背景。
现在,让我们修改模板以使用Background属性。
具有背景属性的模板
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Grid Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="My Custom Control " Grid.Row="0" />
<ContentPresenter Grid.Row="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
结果输出现在将应用指定的背景。
我认为(虽然找不到任何引用),Opacity会应用于元素/ Control,无论Control的模板是否担心Opacity属性。
在CustomControl上设置不透明度的Window1.xam
<Grid>
<wpfApplication5:CustomControl1 Background="Green" Opacity="0.2">
<Button Content="Button Within Custom Control" Margin="25"/>
</wpfApplication5:CustomControl1>
</Grid>
和结果输出
请参阅,即使我们的自定义控件模板对Opacity
属性没有任何担忧,也会应用Opacity。
最后,要回答您的问题:虽然将Opacity
设置为0
或Background
设置为Transparent
可能会为您提供相同的视觉效果。但是,对于Background
属性,它完全取决于Control实现以及它如何处理Background属性。然而,随着Opacity
,它将从父元素应用到元素树到子元素,而不管控件如何。
请参阅MSDN页面,UIElement.Opacity Property以了解有关“不透明度”属性的更多信息,以及在元素树中将不透明度设置为多个级别时的行为方式。