我向 Frame 的导航栏添加了一个 StackPanel。 我右键单击我的框架,然后“编辑模板”和“编辑当前”,然后在导航按钮旁边添加了我命名的 StackPanel 和一些按钮。伟大的!它起作用了。
<Frame x:Name="MainContent" Content="{Binding CurrentContent, UpdateSourceTrigger=PropertyChanged}" ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.CanContentScroll="True" NavigationUIVisibility="Visible" Style="{DynamicResource FrameStyle1}">
<Frame.Resources>
<!-- Something -->
<ControlTemplate x:Key="FrameNavChromeTemplateKey" TargetType="{x:Type Frame}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
<DockPanel>
<Grid Background="{StaticResource NavigationWindowNavigationChromeBackground}" DockPanel.Dock="Top" Height="22">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Menu x:Name="NavMenu" Grid.ColumnSpan="3" Height="16" Margin="1,0,0,0" Style="{StaticResource NavigationWindowMenu}" VerticalAlignment="Center">
<MenuItem ItemContainerStyle="{StaticResource NavigationWindowNavigationButtonJournalEntryStyle}" Padding="0,2,4,0" Style="{StaticResource NavigationWindowMenuItem}">
<MenuItem.ItemsSource>
<MultiBinding Converter="{StaticResource JournalEntryUnifiedViewConverter}">
<Binding Path="BackStack" RelativeSource="{RelativeSource TemplatedParent}"/>
<Binding Path="ForwardStack" RelativeSource="{RelativeSource TemplatedParent}"/>
</MultiBinding>
</MenuItem.ItemsSource>
</MenuItem>
</Menu>
<Path Grid.ColumnSpan="3" Grid.Column="0" Data="M22.5767,21.035 Q27,19.37 31.424,21.035 A12.5,12.5,0,0,0,53.5,13 A12.5,12.5,0,0,0,37.765,0.926 Q27,4.93 16.235,0.926 A12.5,12.5,0,0,0,0.5,13 A12.5,12.5,0,0,0,22.5767,21.035 z" HorizontalAlignment="Left" IsHitTestVisible="false" Margin="2,0,0,0" SnapsToDevicePixels="false" StrokeThickness="1" VerticalAlignment="Center">
<Path.Fill>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#A0C2CCE7" Offset="0"/>
<GradientStop Color="#60FFFFFF" Offset="1"/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Path.Fill>
<Path.LayoutTransform>
<ScaleTransform ScaleY="0.667" ScaleX="0.667"/>
</Path.LayoutTransform>
<Path.Stroke>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#FFB7C2E3" Offset="0.2"/>
<GradientStop Color="#A0FFFFFF" Offset="0.9"/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Path.Stroke>
</Path>
<Button Grid.Column="0" Margin="3,0,1,0" Style="{StaticResource NavigationWindowBackButtonStyle}">
<Button.LayoutTransform>
<ScaleTransform ScaleY="0.667" ScaleX="0.667"/>
</Button.LayoutTransform>
</Button>
<Button Grid.Column="1" Margin="1,0,0,0" Style="{StaticResource NavigationWindowForwardButtonStyle}">
<Button.LayoutTransform>
<ScaleTransform ScaleY="0.667" ScaleX="0.667"/>
</Button.LayoutTransform>
</Button>
<StackPanel Orientation="Horizontal" Name="CUSTOMNAVBAR" Grid.Column="3" Margin="5,0,10,0">
<Button></Button>
<Button></Button>
</StackPanel>
</Grid>
<ContentPresenter x:Name="PART_FrameCP"/>
</DockPanel>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="CanGoForward" Value="false"/>
<Condition Property="CanGoBack" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" TargetName="NavMenu" Value="false"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<!-- Something -->
</Frame.Resources>
</Frame>
但我不知道如何访问这个面板..我已经尝试过:
var x = (StackPanel)MainContent.Template.FindName("CUSTOMNAVBAR", MainContent);
var y = (StackPanel)FindName("CUSTOMNAVBAR");
var k = (StackPanel)MainContent.FindResource("CUSTOMNAVBAR");
var i = (StackPanel)MainContent.Resources.FindName("CUSTOMNAVBAR");
var z = (StackPanel)FindResource("CUSTOMNAVBAR");
并且它不断返回 null 或引发异常...请帮助
最佳答案
这应该有效:
var x = (StackPanel)MainContent.Template.FindName("CUSTOMNAVBAR", MainContent);
但请确保在窗口已加载时运行代码,例如将代码放入某些Loaded
事件处理程序中。或者您也可以尝试先调用 ApplyTemplate()
方法:
MainContent.ApplyTemplate();
var x = (StackPanel)MainContent.Template.FindName("CUSTOMNAVBAR", MainContent);
关于c# - 如何访问WPF框架导航栏中的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898821/