WPF XAML Соберите свойство из шаблона и используйте его как триггер в другом шаблоне. - PullRequest
0 голосов
/ 24 октября 2018

Если при нажатии кнопки содержимое кнопки меняется на «ARMED», а текстовое поле IsEnabled становится ложным и светло-серым.

Это цель моего приложения.Дело в том, что он мне нужен в ресурсе, а не в

Следующие работы в сетке:

Описание: ToggleButton имеет свойство IsChecked с этим я переключаю содержание кнопки.Кроме того, IsChecked используется в качестве DataTrigger в текстовом поле.

<Window x:Class="EnableDisableUeberButton.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:EnableDisableUeberButton"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">    
<Grid>
    <StackPanel>
            <TextBox x:Name="Software" Text="TextToEnableDisable">
                <TextBox.Style>
                    <Style TargetType="TextBox">
                        <Setter Property="IsEnabled" Value="True" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsChecked, ElementName=ToggleButton}" Value="true">
                                <Setter Property="IsEnabled" Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBox.Style>
            </TextBox>
            <ToggleButton x:Name="ToggleButton">
                <ToggleButton.Style>
                    <Style TargetType="{x:Type ToggleButton}">
                        <Setter Property="Content" Value="Disarmed"/>
                        <Style.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter Property="Content" Value="ARMED"/>
                                <Setter Property="Foreground" Value="Red"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ToggleButton.Style>
            </ToggleButton>
        </StackPanel>    
</Grid>

Как сделать то же самое в ресурсе

Описание: такое же поведение, которое мне нужно в качестве ресурса.Проблема в том, что я не могу связать статический ресурс.Что работает, когда я использую только xaml .

Вопрос к Коду обрезанного ресурса , который не работает, и мне нужна помощь

В ControlTemplate TextBox я показываю, что мне нужно.

  • Как мне получить из StaticResource ToggleButton Свойство IsChecked ?
  • Как я могу использовать IsChecked в качестве триггера для включения или отключения текста из TextBox в шаблоне ToggleButton?

Snipped:

<Window x:Class="EnableDisableUeberButton.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:EnableDisableUeberButton"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.Resources>
    <ControlTemplate x:Key="ToggleButton" >
        <ToggleButton >
            <ToggleButton.Style>
                <Style TargetType="{x:Type ToggleButton}">
                    <Setter Property="Content" Value="Disarmed" />
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Content" Value="ARMED" />
                            <Setter Property="Foreground" Value="Green" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ToggleButton.Style>
        </ToggleButton>
    </ControlTemplate>
    <ControlTemplate x:Key="TextBox" x:Name="Software">
        <TextBox Text="TextToEnableDisable">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ToggleButton}">
                                <Trigger Property="{Binding Source=ToggleButton, Path=IsChecked}" Value="false">
                                    <Setter Property="TextBox.IsEnabled" Value="False" />
                                </Trigger>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TextBox.Style>
        </TextBox>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <StackPanel>       
        <Label>Template Test</Label>
        <TextBox Template="{StaticResource TextBox}" Text="TextToEnableDisable"></TextBox>
        <ToggleButton Template="{StaticResource ToggleButton}"></ToggleButton>
    </StackPanel>
</Grid>

...