C# WPF-绑定在可视性之上
我有一个导航栏,其中有几个按钮,当选择一个按钮时,我将C# WPF-绑定在可视性之上,c#,wpf,C#,Wpf,我有一个导航栏,其中有几个按钮,当选择一个按钮时,我将行程宽度设置为某个值。我的问题是,当我将鼠标移到按钮上时,我会触发我的IsMouseOver事件,该事件会在我离开按钮时重置厚度。这种情况也应该发生,但对于当前选中的按钮而言不应发生。是否有一种方法可以绑定此按钮,并在选择按钮时告知事件,取消操作或按住您的StrokeThickness 视图模型: [Obsolete] public EinzelneFrageButtonViewModel() { }
行程宽度设置为某个值。我的问题是,当我将鼠标移到按钮上时,我会触发我的IsMouseOver
事件,该事件会在我离开按钮时重置厚度。这种情况也应该发生,但对于当前选中的按钮而言不应发生。是否有一种方法可以绑定此按钮,并在选择按钮时告知事件,取消操作或按住您的StrokeThickness
视图模型:
[Obsolete]
public EinzelneFrageButtonViewModel()
{
}
public EinzelneFrageButtonViewModel(Frage frage, int frageNummer)
{
CheckIsButtonEnabled(frage, frageNummer);
Frage = frage;
FrageNummer = frageNummer.ToString();
}
public EinzelneFrageButtonViewModel(Frage frage, int frageNummer, bool isSelected) : this(frage, frageNummer)
{
IsSelected = isSelected;
}
private void CheckIsButtonEnabled(Frage frage, int frageNummer)
{
if (frage == null || frageNummer < 1)
{
IsButtonEnabled = false;
}
else
{
IsButtonEnabled = true;
}
}
private void OnFrageSelected(object obj)
{
if (!IsSelected)
{
IsSelected = true;
}
LoadSelectedFrage?.Invoke(this, new LoadSelectedFrageEventArgs(Frage, int.Parse(FrageNummer) - 1));
}
private bool m_isSelected;
public bool IsSelected
{
get
{
return m_isSelected;
}
set
{
m_isSelected = value;
StrokeThickness = m_isSelected ? 2.5 : 0;
OnPropertyChanged();
}
}
private bool m_isButtonEnabled;
public bool IsButtonEnabled
{
get
{
return m_isButtonEnabled;
}
set
{
if (m_isButtonEnabled != value)
{
m_isButtonEnabled = value;
OnPropertyChanged();
}
}
}
private string m_frageNummer;
public string FrageNummer
{
get
{
return m_frageNummer;
}
set
{
if (m_frageNummer != value)
{
m_frageNummer = value;
if (m_frageNummer == "0")
{
m_frageNummer = null;
}
OnPropertyChanged();
}
}
}
private double m_strokeThickness;
public double StrokeThickness
{
get
{
return m_strokeThickness;
}
set
{
// ReSharper disable once CompareOfFloatsByEqualityOperator
if (m_strokeThickness != value)
{
m_strokeThickness = value;
OnPropertyChanged();
}
}
}
public ICommand FrageSelectedCommand => new ActionCommand(OnFrageSelected);
}
[过时]
公共EinzelnefrageButtonView模型()
{
}
公共EinzelnefrageButtonView模型(Frage-Frage,国际Fragenumer)
{
选中按钮已启用(frage,Fragenumer);
磨损=磨损;
fragenumer=fragenumer.ToString();
}
公共EinzelneFrageButtonViewModel(Frage-Frage,int-Fragenumer,bool被选中):此(Frage,Fragenumer)
{
IsSelected=IsSelected;
}
私人作废支票按钮已启用(Frage Frage,int Fragenumer)
{
if(frage==null | | fragenumer<1)
{
IsButtonneEnabled=错误;
}
其他的
{
IsButtonneEnabled=真;
}
}
已选择的私有无效(对象obj)
{
如果(!IsSelected)
{
IsSelected=true;
}
LoadSelectedFrage?.Invoke(这是新的LoadSelectedFrageEventArgs(Frage,int.Parse(fragenumer)-1));
}
私人布尔穆伊当选;
公选学校
{
得到
{
返回m_isSelected;
}
设置
{
m_isSelected=值;
StrokeThickness=m_?2.5:0;
OnPropertyChanged();
}
}
私有布尔m_按钮处于启用状态;
公共布尔值已禁用
{
得到
{
返回m_按钮已启用;
}
设置
{
如果(m_isButtonEnabled!=值)
{
m_IsButtonneEnabled=值;
OnPropertyChanged();
}
}
}
私人字符串m_Fragenumer;
公共字符串粉碎机
{
得到
{
返回m_Fragenumer;
}
设置
{
if(m_fragenumer!=值)
{
m_fragenumer=值;
如果(m_Fragenumer==“0”)
{
m_fragenumer=null;
}
OnPropertyChanged();
}
}
}
私人双m_strokeThickness;
公共双冲程
{
得到
{
返回m_strokeThickness;
}
设置
{
//ReSharper禁用一次比较OffloatsByQualityOperator
if(m_strokeThickness!=值)
{
m_strokeThickness=值;
OnPropertyChanged();
}
}
}
public ICommand FrageSelectedCommand=>new ActionCommand(OnFrageSelected);
}
XAML:
是的,您需要查看按钮样式和触发器。有一些状态触发器指示按钮在每个状态下的样式。你可以从头开始制作,也可以使用内置的。在你的情况下,我建议什么是内置的
我还建议使用一个ToggleButton,如果您还没有,它已经有一个IsChecked状态
这里是指向状态和模板的MSDN链接,用于切换按钮以获取更多信息 请分享相关代码。我刚刚编辑了一个问题。@jo.hwg:您在哪里绑定到您发布的属性。。。?
<Style x:Key="FrageButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource MaterialDesignRaisedButton}">
<Setter Property="FontSize" Value="20" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="GhostWhite" />
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="Background" Value="#0B8CF4" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50"/>
<Setter Property="Width" Value="53.8"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.300" To="2.5" Storyboard.TargetProperty="BorderThickness" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.150" To="0" Storyboard.TargetProperty="BorderThickness" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>