Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight TextBox.前台.Opacity属性的奇怪行为_Silverlight_User Interface_Silverlight 4.0 - Fatal编程技术网

Silverlight TextBox.前台.Opacity属性的奇怪行为

Silverlight TextBox.前台.Opacity属性的奇怪行为,silverlight,user-interface,silverlight-4.0,Silverlight,User Interface,Silverlight 4.0,我创建了一个silverlight模板控件。house控件由4个元素组成:2个文本框和2个文本块。 标记(在generic.xaml中): 当我在silverlight应用程序中添加此控件时,所有textboxs元素开始用前台表示文本。不透明度=0.5 启动应用程序: 选择“登录”选项卡: 返回“一些信息”选项卡: 样本位于此处: 是silverlight bug还是我做错了什么?问题是前台属性的类型是Brush,它是引用类型(类) 当您指定.Opacity=0.5时,您正在更改引用的笔刷

我创建了一个silverlight模板控件。house控件由4个元素组成:2个文本框和2个文本块。 标记(在generic.xaml中):

当我在silverlight应用程序中添加此控件时,所有textboxs元素开始用前台表示文本。不透明度=0.5 启动应用程序:

选择“登录”选项卡:

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

样本位于此处:
是silverlight bug还是我做错了什么?

问题是前台属性的类型是
Brush
,它是引用类型(类)

当您指定
.Opacity=0.5
时,您正在更改引用的
笔刷的不透明度值。引用同一笔刷的所有其他元素都将受到影响

通常,我们会在控件模板的VisualStateManager中使用情节提要来指定控件在不同“状态”下的视觉外观

但是,代码的快速修复方法是:

private void SetInActive()     
{     
    Brush brush = new SolidColorBrush(Colors.Black) { Opacity = 0.5 };
    _loginTextBox.Foreground = brush    
    _passwordTextBox.Foreground= brush
}   
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;
    }
}
private void SetInActive()     
{     
    Brush brush = new SolidColorBrush(Colors.Black) { Opacity = 0.5 };
    _loginTextBox.Foreground = brush    
    _passwordTextBox.Foreground= brush
}