2013-06-04 68 views
0

我在Visual Studio 2010 express中使用WPF c#創建桌面應用程序。我創建了一個菜單欄,我希望根據用戶訪問級別顯示某些元素。我可以將菜單的可見性設置爲Hidden作爲默認設置,但是一旦登錄成功,就很難將訪問權限設置爲Visible。下面是'xaml'代碼和c#代碼的示例。基於用戶訪問級別隱藏和顯示菜單(工具)欄

'XAML代碼'

<Menu Name="MenuBar" VerticalAlignment="Top" Width="Auto" Margin="0,0,0,389"> 
    <MenuItem Header="_Maintenance" Margin="2,0,0,2" Width="Auto" 
       Visibility="hidden" Click="MenuItem_Click"> 
     <MenuItem Header="Customer Maintenance"/> 
     <MenuItem Header="Staff Maintenance"/> 
     <MenuItem Header="User Maintenance"/> 
     <MenuItem Header="Item Maintenance"/> 
     <MenuItem Header="Standing Maintenance"/> 
    </MenuItem> 
</Menu> 

我的 'C#代碼'

public MainWindow() 
{ 
    InitializeComponent(); 
} 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    MenuBar.Visibility="Visible"; 

    //Load and display sign in screen 
    App1 app = new App1(); 
    app.LoadSignIn(); 
} 

錯誤,我現在面臨的嘗試:

無法隱式轉換類型 '字符串'到'System.Windows.Visibility'

+0

你在應用程序中使用MVVM設計模式嗎? – Colin

+0

嗨科林,不,我不是,事實上沒有聽說過它。這是我應該看看的東西嗎?有沒有一個好的地方,我可以尋找更多的信息,或者我應該只是谷歌? – user2449833

+0

這是一個在WPF中廣泛使用的設計模式。這是一個[鏈接](http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explained)介紹它。如果你使用它,你的問題會很簡單。希望它有幫助。 – Colin

回答

0

你要綁定到StyleTrigger得到這個行爲,像這樣(從下面的鏈接之一摘錄,修改,以符合您提供的XAML):

<Window.Resources> 
    <Style x:Key="VisibleWhenUserAllowedAccess" TargetType="MenuItem"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsUserAllowedAccess}" Value="False"> 
       <Setter Property="Visibility" Value="Hidden"/> 
      </DataTrigger> 
    </Style.Triggers> 
    </Style> 

<Menu Name="MenuBar" VerticalAlignment="Top" Width="Auto" Margin="0,0,0,389"> 
    <MenuItem Header="_Maintenance" Margin="2,0,0,2" Width="Auto" 
      Click="MenuItem_Click" 
      Style="{StaticResource VisibleWhenFileIsOpen}"> 
     <MenuItem Header="Customer Maintenance"/> 
     <MenuItem Header="Staff Maintenance"/> 
     <MenuItem Header="User Maintenance"/> 
     <MenuItem Header="Item Maintenance"/> 
     <MenuItem Header="Standing Maintenance"/> 
    </MenuItem> 
</Menu> 

在這兩個環節上改變WPF菜單的知名度更多閱讀:

WPF UserControl Context Menu Visibility Binding

http://www.codeproject.com/Articles/37848/WPF-Data-Bound-Menus

+0

謝謝你戴夫。我會在你的建議中告訴你。謝謝 – user2449833

+0

@ user2449833爲你工作嗎? – Gjeltema

0

您的代碼

MenuBar.Visibility="Visible"; 

是不正確的。

可見性是一個枚舉類型而不是字符串。你可以這樣設置:

MenuBar.Visibility =Visibility.Visible. 
+0

這是行不通的 - 我試了一下,只是爲了確認一下我昨晚看了這個。 – Gjeltema

+0

@Gjeltema但OP中的錯誤似乎是問題所在。 – Colin

+0

你是對的,它解決了他確切的問題,但它不會解決他的實際問題。如果他從枚舉中正確賦值,那麼他會馬上回答「我怎樣才能使它工作,因爲枚舉不會改變可見性?」。我傾向於在大多數情況下儘量少回答這個問題,但在這種情況下,似乎應該採取下一步的回答。 – Gjeltema