#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 на метод.