Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
Wpf ImageBrush不透明度绑定到文本框_Wpf - Fatal编程技术网

Wpf ImageBrush不透明度绑定到文本框

Wpf ImageBrush不透明度绑定到文本框,wpf,Wpf,我想根据文本框的内容显示和隐藏图像作为文本框的背景。为此,我使用了ImageBrush,并通过值转换器绑定到TextBox的Text属性来调节不透明度: <TextBox Height="23" HorizontalAlignment="Left" Margin="175,47,0,0" VerticalAlignment="Top" Width="120"> <TextBox.Style> <Style Ta

我想根据文本框的内容显示和隐藏图像作为文本框的背景。为此,我使用了ImageBrush,并通过值转换器绑定到TextBox的Text属性来调节不透明度:

<TextBox Height="23" 
     HorizontalAlignment="Left" 
     Margin="175,47,0,0" 
     VerticalAlignment="Top" 
     Width="120">
<TextBox.Style>
    <Style TargetType="{x:Type TextBox}">
        <Style.Resources>

            <!-- Converter -->
            <local:EmptyStringToNotOpacityConverter x:Key="EmptyStringToNotOpacityConverter" />

        </Style.Resources>
        <Setter Property="Background">
            <Setter.Value>
                <ImageBrush ImageSource="search.png" 
                            Stretch="None" 
                            AlignmentX="Right" 
                            AlignmentY="Center"
                             Opacity="{Binding RelativeSource={RelativeSource AncestorType=TextBox}, 
                                              Path=Text, 
                                              Converter={StaticResource EmptyStringToNotOpacityConverter}, Mode=OneWay}"
                            />
            </Setter.Value>
        </Setter>
    </Style>
</TextBox.Style>

有人遇到过这种行为并找到了防止绑定错误的解决方法吗?

在咨询Microsoft和一个支持案例后,发现这仍然是Visual Studio 2010中未修复的错误(错误Dev10 | 817794),对可执行文件没有已知的后果

然而,由于我在VS2010中遇到了很多这样的错误消息,重要的错误消息在输出窗口中丢失了。因此,我试图找到一种解决方法,并提出了一种使用VisualBrush而不是ImageBrush的解决方案:

<Window x:Class="CSVisualBrush.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Visual Brush Opacity Binding" Height="350" Width="525">
    <Grid>
        <TextBox Name="txt" 
                 Height="23" 
                 HorizontalAlignment="Left" 
                 Margin="175,47,0,0" 
                 VerticalAlignment="Top" 
                 Width="120">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="Background">
                        <Setter.Value>
                            <VisualBrush Stretch="None" 
                                         AlignmentX="Right"
                                         AlignmentY="Center"
                                         >
                                <VisualBrush.Visual>
                                    <Image Name="img" Source="/CSVisualBrush;component/search.png" />
                                </VisualBrush.Visual>
                            </VisualBrush>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TextBox.Style>
        </TextBox>
    </Grid>
</Window>
据我所知,我不知道为什么绑定可以在代码中工作,但不能在XAML中工作。 如果anbody遇到同样的问题,我会将解决方案VS2010放到我的网站上

<Window x:Class="CSVisualBrush.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Visual Brush Opacity Binding" Height="350" Width="525">
    <Grid>
        <TextBox Name="txt" 
                 Height="23" 
                 HorizontalAlignment="Left" 
                 Margin="175,47,0,0" 
                 VerticalAlignment="Top" 
                 Width="120">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="Background">
                        <Setter.Value>
                            <VisualBrush Stretch="None" 
                                         AlignmentX="Right"
                                         AlignmentY="Center"
                                         >
                                <VisualBrush.Visual>
                                    <Image Name="img" Source="/CSVisualBrush;component/search.png" />
                                </VisualBrush.Visual>
                            </VisualBrush>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TextBox.Style>
        </TextBox>
    </Grid>
</Window>
public MainWindow() {
    InitializeComponent();

    // Set binding to opacity of the image
    // REMARK: Binding doesn't work within XAML
    Image img = (Image)((VisualBrush)txt.Background).Visual;
    Binding b = new Binding();
    b.Source = txt;
    b.Path = new PropertyPath("Text");
    b.Converter = new EmptyStringToNotOpacityConverter();
    img.SetBinding(Image.OpacityProperty, b);
}