【发布时间】:2013-05-31 05:27:14
【问题描述】:
我有一个简单的切换按钮,效果很好。我可以单击切换按钮并更改它显示的图像。我现在想做的是与后面的代码相同的事情。找到一个类似的链接
编辑:这就是我想要做的
我阅读了以下线程,该线程确切地告诉了我需要做什么
WPF ToggleButton.IsChecked binding does not work
以编程方式,我的代码似乎没有任何效果。如果我单击 UI 它可以工作,但我真的想从程序中更改状态。下面的程序只是一个原型。
我无法弄清楚我的 XAML 或代码有什么问题。最后决定把它全部粘贴为测试程序!
Xaml:
<Window x:Class="ToggleButtonImageChange.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ToggleButtonImageChange"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Image Source="secured.jpg"
x:Key="MyImage1" />
<Image Source="unsecured.jpg"
x:Key="MyImage2" />
<Style TargetType="{x:Type ToggleButton}"
x:Key="MyToggleButtonStyle">
<Setter Property="Content"
Value="{DynamicResource MyImage2}" />
<Style.Triggers>
<Trigger Property="IsChecked"
Value="True">
<Setter Property="Content"
Value="{DynamicResource MyImage2}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<ToggleButton Style="{StaticResource MyToggleButtonStyle}" Name="tgbtn" Margin="0,29,0,139" IsChecked="{Binding Path=isAdmin, Mode=TwoWay}"/>
</Grid>
</Window>
后面的代码:
namespace ToggleButtonImageChange
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window,INotifyPropertyChanged
{
bool _isAdmin;
public MainWindow()
{
InitializeComponent();
isAdmin = true;
OnPropertyChanged("isAdmin");
}
public bool isAdmin
{
get
{
return _isAdmin;
}
set
{
_isAdmin = value;
OnPropertyChanged("isAdmin");
}
}
private void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
public event PropertyChangedEventHandler PropertyChanged;
}
我进入调试器并看到即使我将 isAdmin 设置为 true,按钮 isChecked 仍然为 false,因此显示了不正确的图像。我不太明白做错了什么以及如何通过代码更改 isChecked。
【问题讨论】:
-
您如何使用问题顶部显示的代码调用该函数?
-
您的代码非常适合我!我有另一个按钮,在 clickEvent 中我有 tgbtn.IsChecked =!tgbtn.IsChecked; .这对我来说很好。
-
@KristianK。我只是按照我展示它的方式使用它。如果(管理员){ tgbtn.IsChecked = true;} 。默认情况下,该按钮未选中。
-
@Manoj 我没有单独的按钮。我只有一个名为 tgbtn 的切换按钮。默认情况下,该按钮未选中。我想在代码中执行以下操作: if(admin) { tgbtn.IsChecked = true;} 。当我这样做时,我希望我的按钮图像会改变。你能做到吗?
-
窗口已经加载了吗?也许您需要更新 Loaded 事件的状态?