wpf 使用 c# 在 VisualBrush 中设置图像运行时
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14819872/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Set image runtime in VisualBrush with c#
提问by ghiboz
actually I set an image took from the resources at designtime into the xamlfile like this:
实际上,我将设计时从资源中获取的图像设置为xaml文件,如下所示:
<Button Click="btnLogin_Click" Name="btnLogin">
<StackPanel Orientation="Horizontal">
<Rectangle Width="20" Height="20" Name="recLogin">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="White" />
</Rectangle.Resources>
<Rectangle.Fill>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_user}" x:Name="brushLogin" />
</Rectangle.Fill>
</Rectangle>
<TextBlock Text=" login" Name="txbLogin" />
</StackPanel>
</Button>
and works fine. But (is a login button)I wish that when the user do a login, the image on the button (inside a rectangle)will be changed..
并且工作正常。但是(是一个登录按钮)我希望当用户登录时,按钮上的图像(矩形内)会改变..
How can I do?
我能怎么做?
回答by sa_ddam213
You can use a DataTriggerto change the image when a property updates in your model.
DataTrigger当模型中的属性更新时,您可以使用来更改图像。
In this example the boolean value IsLoggedInis changed which in turn changes the image.
在这个例子中,布尔值IsLoggedIn被改变,这反过来又改变了图像。
Example:
例子:
Xaml:
Xml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="125.078" Width="236.441" Name="UI" >
<Window.Resources>
<VisualBrush x:Key="Loggedin">
<VisualBrush.Visual>
<Image Source="http://icons.iconarchive.com/icons/deleket/sleek-xp-basic/32/Ok-icon.png" Stretch="Uniform" />
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush x:Key="NotLoggedin">
<VisualBrush.Visual>
<Image Source="http://icons.iconarchive.com/icons/deleket/sleek-xp-basic/32/Close-2-icon.png" Stretch="Uniform" />
</VisualBrush.Visual>
</VisualBrush>
</Window.Resources>
<Grid DataContext="{Binding ElementName=UI}">
<Button Click="btnLogin_Click" Name="btnLogin" HorizontalAlignment="Left" Width="94" Height="40" VerticalAlignment="Top" Margin="63,26,0,0">
<StackPanel Orientation="Horizontal">
<Rectangle Width="20" Height="20" Name="recLogin">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="White" />
</Rectangle.Resources>
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Fill" Value="{StaticResource NotLoggedin}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsLoggedIn}" Value="True">
<Setter Property="Fill" Value="{StaticResource Loggedin}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<TextBlock Text=" login" Name="txbLogin" />
</StackPanel>
</Button>
</Grid>
</Window>
Code:
代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private bool _isLoggedIn;
public MainWindow()
{
InitializeComponent();
}
public bool IsLoggedIn
{
get { return _isLoggedIn; }
set { _isLoggedIn = value; NotifyPropertyChanged("IsLoggedIn"); }
}
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
IsLoggedIn = !IsLoggedIn;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
Note:I just used online images as I dont have your ressources, you can change to suit your needs
注意:我只是使用在线图片,因为我没有您的资源,您可以根据需要进行更改
Result:
结果:
IsLoggedIn = false;
IsLoggedIn = true;

IsLoggedIn = 假;
IsLoggedIn = 真;


