メイン画面に変更を加えており、WPF を使用しています。メイン ウィンドウには 6 つのタブがあり、各タブにはいくつかのボタンがあります。アプリケーションが起動すると、ユーザーがどの画面 (各ボタンで開く) を開くことが許可されているかを確認します。ユーザーがこれらのウィンドウのいずれかを開くことができない場合、その画面に対応するボタンは無効になり、アイコンが変わります。私たちの問題は、私が行ったこの方法は、この変更を選択したタブにのみ適用することです。
コード:
/// <summary>
/// Encontra todos os objetos na tela
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objetoTela"></param>
/// <returns></returns>
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject objetoTela) where T : DependencyObject
{
if (objetoTela != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(objetoTela); i++)
{
DependencyObject objetoFilho = VisualTreeHelper.GetChild(objetoTela, i);
if (objetoFilho != null && objetoFilho is T)
{
yield return (T)objetoFilho;
}
foreach (T componenteObjetoFilho in FindVisualChildren<T>(objetoFilho))
{
yield return componenteObjetoFilho;
}
}
}
}
このメソッド、FindVisualChildren() は、指定されたタイプのウィンドウを検索します。ここでそれを見ることができます:
foreach (RibbonTab tab in FindVisualChildren<RibbonTab>(this.Ribbon))
コード:
foreach (MenuResources item in Enum.GetValues(typeof(MenuResources)))
{
foreach (RibbonTab tab in FindVisualChildren<RibbonTab>(this.Ribbon))
{
foreach (RibbonButton button in FindVisualChildren<RibbonButton>(tab))
{
if (button.Name.Equals("rbb" + item.ToString()))
{
if (authorizationService.CheckAccess((Int64)item, true))
{
button.LargeImageSource = (ImageSource)FindResource("ImageMenu" + item.ToString());
button.IsEnabled = true;
}
else
{
button.LargeImageSource = (ImageSource)FindResource("ImageMenuDesabilitado" + item.ToString());
button.IsEnabled = false;
}
}
}
}
}
これは、RibbonTabs です (例として、ここにはボタンはなく、タブのみです):
<ribbon:RibbonTab x:Name="rbtOperacaoLCG" ContextualTabGroupHeader="Operação" Header="LCG" BorderBrush="White" KeyTip="O" Foreground="Black" Background="White"/>
<ribbon:RibbonTab x:Name="rbtSeguranca" Header="Segurança" KeyTip="S" Foreground="Black" FontWeight="Normal"/>
<ribbon:RibbonTab x:Name="rbtManutencao" Header="Manutenção" KeyTip="M" Foreground="Black"/>
<ribbon:RibbonTab x:Name="rbtComunicacao" Header="Comunicação" KeyTip="C" Foreground="Black" />
<ribbon:RibbonTab x:Name="rbtOperacaoComum" ContextualTabGroupHeader="Operação" Header="Comum" BorderBrush="White" KeyTip="O" Foreground="Black" Background="White" IsSelected="True"/>
<ribbon:RibbonTab x:Name="rbtOperacaoLTQ" ContextualTabGroupHeader="Operação" Header="LTQ" BorderBrush="White" KeyTip="O" Foreground="Black" Background="White"/>
だから、これは私たちの問題です。すべての RibbonTabs のすべての RibbonButtons をメイン ウィンドウに表示するにはどうすればよいですか?
よろしくお願いします、
グスタボ