Как использовать раскадровку и кнопку в классе MainViewModel? - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу использовать раскадровку в моей DataContext = mainviewmodel.Мой код xaml для раскадровки:

    <Window.Resources>
    <Storyboard x:Key="showLeftMenuSB">
        <ThicknessAnimation Storyboard.TargetProperty="Margin" From="-785,0,0,0" To="0,0,0,0" DecelerationRatio="0.9" Duration="0:0:1"/>
    </Storyboard>
    <Storyboard x:Key="hideLeftMenuSB">
        <ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,0,0,0" To="-785,0,0,0" DecelerationRatio="0.9" Duration="0:0:1"/>
    </Storyboard>
</Window.Resources>



        <StackPanel Grid.Row="1" Panel.ZIndex="1" Grid.ColumnSpan="2" Name="leftMenu" Orientation="Horizontal" Height="Auto" HorizontalAlignment="Left" Margin="0,0,0,0">
        <Border Background="WhiteSmoke">
            <Grid Width="785">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <view:NavigationView DataContext="{Binding NavigationViewModel}"/>
                <Button Grid.Column="1" Name="leftMenuHide" Width="10" Height="80" Command="{Binding Path=HideCommand}" Content="Hide"/>
                <!--"btnRightMenuHide_Click"-->
            </Grid>
        </Border>
        <Grid>
            <Button Name="lefttMenuShow" Width="10" Height="80" Click="btnRightMenuShow_Click" Content="Show"/>
        </Grid>
    </StackPanel>

Но я хочу связать команду в своем классе mainviewmodel.Если я хочу сделать это, используя этот код

        private void ShowHideMenu(string Storyboard, Button btnHide, Button btnShow, StackPanel pnl)
    {
        Storyboard sb = App.Current.Resources[Storyboard] as Storyboard;
        sb.Begin(pnl);

        if (Storyboard.Contains("Show"))
        {
            btnHide.Visibility = System.Windows.Visibility.Visible;
            btnShow.Visibility = System.Windows.Visibility.Hidden;
        }
        else if (Storyboard.Contains("Hide"))
        {
            btnHide.Visibility = System.Windows.Visibility.Hidden;
            btnShow.Visibility = System.Windows.Visibility.Visible;
        }
    }

И команда

        private void OnClickHide()
    {
        ShowHideMenu("hideLeftMenuSB",leftMenuHide, lefttMenuShow, leftMenu);
    }

У меня есть ошибка "Имя кнопки" не существует в текущем контексте. Я должен использовать это в mainviewmodelпотому что мне нужно использовать эту команду, если что-то показывает, но я не знаю, как я могу использовать кнопку в MainWindow с помощью класса MainViewModel

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Попробуйте EventTrigger , он применяет набор действий в ответ на событие, включая анимацию.Вы также можете попробовать использовать DataTrigger . Это триггер, который применяет значения свойств или выполняет действия, когда связанные данные удовлетворяют указанному условию.

А затем используйте его, например, так:

<Style>
  <Style.Trigger>
    <EventTrigger RoutedEvent="{x:Static local:Yourclass.yourEvent}">
      <BeginStoryboard>
             .........
      </BeginStoryboard>
    </EventTrigger>
 </Style.Trigger>

Пример DataTrigger:

<Style.Triggers>
            <DataTrigger
                Binding="{Binding RunStoryboard}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                            Storyboard.TargetProperty="Margin"
                            From="50"
                            To="100"
                            Duration="0:0:1"
                            RepeatBehavior="1x"
                            AutoReverse="False"
                            />

                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
0 голосов
/ 03 декабря 2018

Вам нужна ссылка на кнопку в представлении модели.Вы можете передать ссылку как CommandParameter, чтобы иметь ссылку на одну кнопку.Как я вижу, вам нужна только одна кнопка, чтобы быть видимой одновременно, поэтому вы можете использовать IValueConverter для одной кнопки, которая устанавливает видимость кнопки на противоположное значение видимости другой кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...