C# 按钮不能禁用
我想当我点击一个按钮时,背景图像会变为另一个,当我松开按钮时,会变回原来的图像。经过大量的研究,我发现这一点,这对我有很大帮助,而且效果很好!但问题是,我不能禁用按钮,它显示它已禁用,但如果我单击它,它的工作原理就像它未被禁用一样!这是代码的一部分C# 按钮不能禁用,c#,windows-phone-8,C#,Windows Phone 8,我想当我点击一个按钮时,背景图像会变为另一个,当我松开按钮时,会变回原来的图像。经过大量的研究,我发现这一点,这对我有很大帮助,而且效果很好!但问题是,我不能禁用按钮,它显示它已禁用,但如果我单击它,它的工作原理就像它未被禁用一样!这是代码的一部分 using System; using System.Windows; using System.Windows.Media.Imaging; namespace DotNetApp { public partial class Butto
using System;
using System.Windows;
using System.Windows.Media.Imaging;
namespace DotNetApp
{
public partial class ButtonImage
{
#region Fields
public new static readonly DependencyProperty IsEnabledProperty = DependencyProperty.Register("IsEnabled", typeof (bool), typeof (ButtonImage), null);
public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register("ImageSource", typeof (string), typeof (ButtonImage), null);
public static readonly DependencyProperty ImagePressedSourceProperty = DependencyProperty.Register("ImagePressedSource", typeof (string), typeof (ButtonImage), null);
public static readonly DependencyProperty ImageDisabledSourceProperty = DependencyProperty.Register("ImageDisabledSource", typeof (string), typeof (ButtonImage), null);
private BitmapImage _image;
private BitmapImage _imagePressed;
private BitmapImage _imageDisabled;
private bool _isPressed;
#endregion
#region Constructor
public ButtonImage()
{
InitializeComponent();
}
#endregion
#region Properties
public new bool IsEnabled
{
get { return (bool)GetValue(IsEnabledProperty); }
set
{
SetValue(IsEnabledProperty, value);
SetImageFromState();
}
}
public string ImageSource
{
get { return (string) GetValue(ImageSourceProperty); }
set
{
SetValue(ImageSourceProperty, value);
_image = SetImage(value);
SetImageFromState();
}
}
public string ImagePressedSource
{
get { return (string) GetValue(ImagePressedSourceProperty); }
set
{
SetValue(ImagePressedSourceProperty, value);
_imagePressed = SetImage(value);
SetImageFromState();
}
}
public string ImageDisabledSource
{
get { return (string) GetValue(ImageDisabledSourceProperty); }
set
{
SetValue(ImageDisabledSourceProperty, value);
_imageDisabled = SetImage(value);
SetImageFromState();
}
}
#endregion
#region Event Handlers
private void ButtonIsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
SetImageFromState();
}
private void ButtonMouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
_isPressed = true;
SetImageFromState();
}
private void ButtonMouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
_isPressed = false;
SetImageFromState();
}
#endregion
#region Private Methods
private static BitmapImage SetImage(string imageSource)
{
BitmapImage bitmapImage = null;
if (!string.IsNullOrEmpty(imageSource))
{
bitmapImage = new BitmapImage(new Uri(imageSource, UriKind.RelativeOrAbsolute));
}
return bitmapImage;
}
private void SetImageFromState()
{
if (!IsEnabled)
{
image.Source = _imageDisabled;
}
else if (_isPressed)
{
image.Source = _imagePressed;
}
else
{
image.Source = _image;
}
}
#endregion
}
}
这是XAML
<Tap_Test:ButtonImage ImageSource="/images/buttons/star2.png"
ImageDisabledSource="/images/buttons/star2lock.png"
ImagePressedSource="/images/buttons/star2-2.png"
Style="{StaticResource ButtonImageStyle}"
x:Name="star2" Margin="136,80,134,480" BorderBrush="{x:Null}" Click="star2_Click" IsEnabled="False"/>
你可以在我提供的链接上查看完整的代码!我试过
star2.IsEnable=false代码>也是,但它不起作用。有什么建议吗?谢谢 > P>我认为问题来自于“SETIMAGOFF STATE()”方法总是运行,需要一种阻止它运行的方法,考虑如下:
private bool _disableButton;
public bool disableButton {
get { return _disableButton; }
set {
_disableButton = value;
SetValue(IsEnabledProperty, !_disableButton);
}
}
public new bool IsEnabled
{
get { return (bool)GetValue(IsEnabledProperty); }
set
{
if(!disableButton)
{
SetValue(IsEnabledProperty, value);
SetImageFromState();
}
}
}
因此,如果你想真正禁用按钮,你会去
myButton.disableButton = true;
Hi@KillaKem谢谢你的帮助,但是出现了这个错误App.ButtonImage.DisableButton.get必须声明一个主体,因为它没有标记为抽象、外部或部分。知道为什么吗?编译器想要一个主体作为disableButton的getter,检查编辑的代码是否解决了问题。哦,我明白了,谢谢,但按钮仍然没有被禁用:(我仍然可以单击它。查看代码编辑并重试。应该是“SetValue(IsEnableProperty,!\u disableButton);”还是不行吗?/同样的事情,兄弟,有什么想法吗?我想用两个按钮以不同的方式来做