[英]WPF - Binding IsMouseOver Visibillity
I have a navigation bar where there are several buttons and when a button is selected
I set the StrokeThickness
to a certain value
. 我的問題是,當我將鼠標移到按鈕上時,我觸發了IsMouseOver
事件,該事件會在我離開按鈕后立即重置厚度。 這也應該發生,但不會發生在當前selected
的按鈕上。 有沒有辦法綁定它並在selected
按鈕時告訴事件取消操作或保持你的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);
}
XAML:
<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>
是的,您需要查看按鈕樣式和觸發器。 有 State 觸發器,它們根據 state 規定按鈕的樣式。您可以從頭開始制作這些或使用內置的。在您的情況下,我建議內置什么。
我還建議使用 ToggleButton,如果你還沒有,它已經有一個 IsChecked State。
這是 ToggleButton 的狀態和模板的 MSDN 鏈接,以獲取更多信息。 https://docs.microsoft.com/en-us/dotnet/desktop/wpf/controls/togglebutton-styles-and-templates?view=netframeworkdesktop-4.8#:~:text=ToggleButton%20States%20%20%20 %20VisualState%20Name%20,control%20is%20disabled.%20%208%20more%20rows%20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.