Ich benutze MahApps und MVVM Light. Und ich möchte DropDownButton öffnet bei Mauseingabe. Und verstecken Sie es, wenn der Mauszeiger die Taste und das geöffnete Menü verlässt. Zur Code-Vereinfachung schreibe ich keinen Code mit EventToCommand. Ich schreibe gerade Code hinterUnd wieder. Lassen Sie DropDownButton auf Maus öffnen und ausblenden, wenn Maus verlässt
XAML
<controls:DropDownButton x:Name="ddbVolume" Width="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding AudioControls}"
Icon="{DynamicResource appbar_settings}" BorderThickness="0"
ArrowVisibility="Collapsed"
Loaded="OnDropDownButtonLoaded" MouseEnter="OnDropDownButtonMouseEnter">
</controls:DropDownButton>
und CS-
private void OnDropDownButtonMouseEnter(object sender, MouseEventArgs e)
{
var dropDownButton = sender as DropDownButton;
if (dropDownButton != null && !dropDownButton.IsExpanded)
{
dropDownButton.IsExpanded = true;
}
}
private void OnDropDownButtonLoaded(object sender, RoutedEventArgs e)
{
var dropDownButton = sender as DropDownButton;
if (dropDownButton != null)
{
var template = dropDownButton.Template;
var menu = (ContextMenu)template.FindName("PART_Menu", dropDownButton);
menu.MouseLeave += (o, args) =>
{
if (dropDownButton.IsExpanded && !dropDownButton.IsMouseOver && !menu.IsMouseOver)
{
dropDownButton.IsExpanded = false;
}
};
menu.PreviewMouseMove += (o, args) =>
{
if (!dropDownButton.IsExpanded)
{
return;
}
var x = args.GetPosition(menu).X;
var y = args.GetPosition(menu).Y;
if (x < 0 | y < 0 | x > menu.ActualWidth | y > menu.ActualHeight)
{
menu.ReleaseMouseCapture();
}
};
}
else
{
this._logger.Debug($"Error loading DropDownButton");
}
Aber es funktioniert nicht. Der DropDownButton flimmert nur bei Mausüberlauf. Bitte geben Sie mir eine geeignete Lösung oder einen nützlichen Rat zur Lösung dieses Problems.
das Problem war, dass dropDownButton.IsMouseOver ist immer falsch – Anton