2013-06-04 3 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

당신은 너무 (당신의 공급 XAML에 맞게, 아래 링크 중 하나에서 발췌 수정)처럼,이 동작을 얻을 수있는 StyleTrigger에 바인딩 할 수 있습니다 :

<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

Dave에게 감사드립니다. 나는 너의 제안으로 너를 알려주지. 감사합니다 – user2449833

+0

@ user2449833이게 도움이 되었습니까? – Gjeltema

0

귀하의 코드

MenuBar.Visibility="Visible"; 

이 올바르지 않습니다.

가시성은 문자열 대신 enum 유형입니다. 다음과 같이 설정할 수 있습니다.

MenuBar.Visibility =Visibility.Visible. 
+0

이것은 효과가 없을 것입니다. 지난밤을 보았을 때 확인하기 위해 시도했습니다. – Gjeltema

+0

@Gjeltema 그러나 OP의 오류가 문제인 것처럼 보입니다. – Colin

+0

당신은 정확한 진술 한 문제를 해결할 수는 있지만, 실제 문제는 해결되지 않을 것입니다. 열거 형에서 올바르게 값을 할당하면 열거 형을 할당하면 배정을 변경하지 않으므로 어떻게 작동 시키나요?라는 질문을 즉시받을 수 있습니다. 나는 대부분의 경우 질문에 대한 최소한의 대답에 동의하는 경향이 있지만,이 경우 응답의 다음 단계가 취해 져야하는 것으로 보인다. – Gjeltema

관련 문제