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