Выполните команду button, если свойство зависимости пользовательского элемента управления имеет значение true

#c# #wpf #xaml #custom-controls

Вопрос:

Пользовательский контроль.cs

 public class CustomButtons: Control
  {
    public static readonly DependencyProperty CmdExecProperty = DependencyProperty.Register(nameof(CmdExec), typeof(bool), typeof(CustomButtons), new PropertyMetadata("True"));

    public bool CmdExec
    {
      get => (bool)GetValue(CmdExecProperty);
      set => SetValue(CmdExecProperty, value);
    }

 

Универсальный.xaml

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:v="clr-namespace:ServicePageKit"
                    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
                    mc:Ignorable="d">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Theme/CompoundControlStyles.xaml" />
  </ResourceDictionary.MergedDictionaries>

  <!--  Control template for a CustomButtons -->
  <ControlTemplate x:Key="CustomButtonsTemplate"
                   TargetType="{x:Type v:CustomButtons}">
    <Grid Width="128"
          d:DesignHeight="200">
      <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition MaxHeight="52" />
      </Grid.RowDefinitions>

      <Button x:Name="LoadButton"
              Grid.Row="1"
              Height="50"
              HorizontalAlignment="Stretch"
              Command="{Binding CopyCommand}"
              CommandParameter="{Binding Path=Critical,
                                          RelativeSource={RelativeSource Mode=FindAncestor,
                                                                        AncestorType={x:Type v:CustomButtons}},
                                          Mode=OneWay}"
              Content="Copy"
              IsEnabled="true" />
      </Button>
    </Grid>
  </ControlTemplate>

  <Style x:Key="CustomButtonsStyle"
         TargetType="{x:Type v:CustomButtons}">
    <Setter Property="Template" Value="{StaticResource CustomButtonsTemplate}" />
  </Style>

  <Style TargetType="{x:Type v:CustomButtons}" BasedOn="{StaticResource CustomButtonsStyle}" />
</ResourceDictionary>
 

Использование

  <kit:CustomButtons x:Name="SyskonButtons"
                          CmdExec="True"/>
 

Этот пользовательский элемент управления работает нормально, но я хочу, чтобы, когда значение CmdExec DepenpencyProperty равно True, команда (имена команд используются в Generic.xaml в разделе Кнопка) выполнялась независимо от того, нажата кнопка или нет.

Комментарии:

1. Вы уже включили поведение Xaml в ResourceDictionary, поэтому можете использовать InvokeCommandAction и связывать его IsEnabled свойство с помощью CmdExec.

2. Тем не менее, я не понимаю, как это сделать, вы видите, что моя команда находится в другом файле.

3. Это зависит от того, где существует ваша команда копирования и где используются ваши пользовательские кнопки.

4. Что делать, если я добавлю метод ValuePropertyChange. и используя свойство ICommand CopyCommand. Excute(CopyCommand) или я должен изменить свойство ICommand на метод.