В WPF как настроить событие нажатия кнопки, чтобы изменить видимость сетки? - PullRequest
4 голосов
/ 08 октября 2010

Я пытаюсь установить событие кнопки, чтобы изменить видимость сетки, используя только XAML.Я почти уверен, что должен использовать EventTrigger, но я не смог заставить это работать, поэтому моя последняя попытка - создать DataTrigger, связанный с полем в модели представления:

<Style x:Key="PersonalInfoGridStyle" TargetType="{x:Type Grid}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=PersonalInfoGridVisibility}" Value="Collapsed">
            <Setter Property="Grid.Visibility" Value="Collapsed"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

Приведенный выше код не работает, но для меня это менее важно, чем достижение цели всего лишь в XAML (без использования модели представления или кода).

Может кто-нибудь объяснить, как мне поступитьпо этому поводу или если вообще возможно?:) СПАСИБО ВПЕРЕДИ

Ответы [ 3 ]

11 голосов
/ 08 октября 2010

Можно ли использовать кнопку переключения?

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <BooleanToVisibilityConverter x:Key="boolConverter" />
        </Grid.Resources>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <ToggleButton Content="Click Me" x:Name="toggleMe" Grid.Row="0" />
        <Grid Grid.Row="1" Background="Black" Visibility="{Binding ElementName=toggleMe, Path=IsChecked, Converter={StaticResource boolConverter}}">

        </Grid>
    </Grid>
</Window>
2 голосов
/ 08 октября 2010

Хорошо, я понял, как я собираюсь это сделать (используя модель представления). Я создал объект в модели представления типа Visibility (NOT STRING), затем я использовал атрибут Binding в сетке, чтобы связать атрибут Visibility в сетке с объектом Visibility в модели представления.

Теперь все, что мне нужно было сделать, это чтобы событие кнопки изменило объект видимости (ОДНА ЛИНИЯ!) На видимый, вот так:

<Grid Visibility="{Binding Path=GridVisibility">
    [content here]
</Grid>

А в представлении модель:

private Visibility _gridVisibility = Visibility.Visible;
public Visibility GridVisibility
{
    get
    {
        return _gridVisibility;
    }
}

Используйте ваш метод MVVM, чтобы установить свойство самостоятельно (я специально это исключил).

И, наконец, просто свяжите событие нажатия кнопки с методом, который просто изменяет значение GridVisibility на Visibility.Hidden или Visibility.Collapsed.

1 голос
/ 20 октября 2017

Вы можете сделать это в чистом xaml, используя EventTrigger.

<Window x:Class="WpfApp3.MainWindow"
    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"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<StackPanel Width="64" VerticalAlignment="Center">
    <Grid x:Name="grd" Background="Black" Height="48"/>
    <Button Height="48" Content="Hide Grid">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="grd" Storyboard.TargetProperty="Visibility">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
</StackPanel>

...