2017-02-11 61 views
0

我想用命令打开和关闭splitview.pane。这是我的样本XAML代码:使用命令更改xaml属性

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerExecute}" /> 
    </SplitView.Pane> 
</SplitView> 

我使用RelayCommand类并调用这两个方法:

private bool HamburgerCanExecute(object obj) 
    { 
     return true; 
    } 

    private void HamburgerExecute(object obj) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; // this doesn't work 
    } 

我如何使用命令来更改XAML性能能有人给我解释一下吗?

+0

您是否尝试过调试代码?程序是否输入您的命令?当你使用绑定 - 你有没有设置datacontext? – Romasz

+0

可能的重复[如何将WPF按钮绑定到ViewModelBase中的命令?](http://stackoverflow.com/questions/12422945/how-to-bind-wpf-button-to-a-command-in-viewmodelbase)不完全是重复的,但归结为相同的问题。 (如何绑定命令) – CSharpie

+0

你说你使用'RelayCommand'类,我假设它实现了'ICommand'。你绑定这个命令吗?它看起来像你绑定到一个方法。 – Blacktempel

回答

0

我忘了整合UI命名空间......该死的

所以正确的代码是:

private void HamburgerExecute(object obj) 
{ 
    SplitView navigation = obj as SplitView; 
    navigation.IsPaneOpen = !navigation.IsPaneOpen; 
} 

而且CommandParameter在我的xaml文件:

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerCommand}" CommandParameter="{Binding ElementName=AppNavigation}" /> 
    </SplitView.Pane> 
</SplitView> 
0

它看起来像你直接绑定方法到你的Button,但你说你正在使用RelayCommand。请确保您绑定的是RelayCommand而不是实际的方法。

希望它有帮助!

+0

谢谢,这仍然是一个错误,但我现在如何操作IsPaneOpen? AppNavigation在这种情况下是未知的。 – r01f

0

在您的按钮中创建点击事件。

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
<SplitView.Pane> 
    <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Click="Hamburger_Click /> 
</SplitView.Pane> 

C#:

private void Hamburger_Click(object sender, RoutedEventArgs e) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; 
    } 
+0

感谢您的回答,但我想使用命令和mvvm模式。因此代码隐藏中的点击事件不适合我。 – r01f