我创建了一个silverlight模板控件。建筑物控件由4个元素组成:2个文本框和2个文本块。标记(generic.xaml格式):
<Style TargetType="local:InputForm">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:InputForm">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="Login" Grid.Column="0" Grid.Row="0"/>
<TextBlock Text="Password" Grid.Column="0" Grid.Row="1"/>
<TextBox x:Name="LoginTextBox" Grid.Column="1" Grid.Row="0" Text="Login..."/>
<TextBox x:Name="PasswordTextBox" Grid.Column="1" Grid.Row="1" Text="Password..."/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>在代码文件中,我从模板中获取文本框,并将Foreground.Opacity属性设置为0.5。代码:
public class InputForm : Control
{
private TextBox _loginTextBox;
private TextBox _passwordTextBox;
public InputForm()
{
this.DefaultStyleKey = typeof(InputForm);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_loginTextBox = this.GetTemplateChild("LoginTextBox") as TextBox;
_passwordTextBox = this.GetTemplateChild("PasswordTextBox") as TextBox;
SetInActive();
}
private void SetInActive()
{
_loginTextBox.Foreground.Opacity = .5;
_passwordTextBox.Foreground.Opacity = .5;
}
}当我在我的silverlight应用程序中添加这个控件时,所有的文本框元素都开始用Foreground.Opacity = 0.5表示文本启动应用程序:

选择“登录”选项卡:

返回到“一些信息”选项卡:

示例位于此处:http://perpetuumsoft.com/Support/silverlight/SilverlightApplicationOpacity.zip是silverlight错误还是我做错了什么?
发布于 2012-01-13 16:58:49
问题是前台属性的类型是Brush,这是一个引用类型(一个类)。
指定.Opacity = 0.5时,将更改引用的Brush的不透明度值。引用同一画笔的所有其他元素都将受到影响。
通常,我们会在控件模板中使用VisualStateManager中的故事板来指定控件在不同“状态”下的视觉外观。
但是,您的代码的快速修复方法是:
private void SetInActive()
{
Brush brush = new SolidColorBrush(Colors.Black) { Opacity = 0.5 };
_loginTextBox.Foreground = brush
_passwordTextBox.Foreground= brush
} https://stackoverflow.com/questions/8847426
复制相似问题