У меня есть простое приложение WPF с меню сверху. Я хочу добавить параметр, чтобы главное окно оставалось поверх других окон.
Я создал bool с именем setTopMost на вкладке «Свойства»> «Настройки», чтобы пользователи могли сохранить этот параметр. Таким образом, настройка будет запомнена даже после завершения работы приложения.
Все работает, как задумано, я могу нажать на опцию или использовать сочетание клавиш Ctrl + T, чтобы окно оставалось наверху, ноЯ не могу установить флажок рядом с этой опцией, когда окно находится поверх других окон.
Я прочитал несколько статей, касающихся привязки IsChecked к bool, но я не смог решить эту проблему на своемсобственные.
Вот мои коды.
MainWindow.xaml
<Window.InputBindings>
<KeyBinding Gesture="Ctrl+T" Command="{Binding TopMostCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Window.InputBindings>
<MenuItem Header="_Options">
<MenuItem x:Name="Menu_AlwaysOnTop" Header="Always On _Top" IsCheckable="True" IsChecked="{Binding isTopMost}" Command="{Binding TopMostCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}" InputGestureText="Ctrl+T" />
</MenuItem>
MainWindow.xaml.cs
namespace WPF_Practice
{
public partial class MainWindow : Window
{
public bool isTopMost;
public MainWindow()
{
InitializeComponent();
DataContext = new PracticeDataContext();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
isTopMost = Properties.Settings.Default.setTopMost;
Topmost = Properties.Settings.Default.setTopMost;
}
}
public class PracticeDataContext
{
public ICommand TopMostCommand { get; } = new TopMostCommand();
}
public class TopMostCommand : ICommand
{
public void Execute(object parameter)
{
var TopMostClass = new MainWindow();
TopMostClass.WindowTopMost();
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
}
Пожалуйста, обратите внимание, что яделать это как хобби и совершенно новое для этого.