c# - 如何访问WPF框架导航栏中的控件?

标签 c# wpf frame

我向 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/

相关文章:

c# - 在 MVVMCross 中查看一个已经实例化的 ViewModel

c# - ASP.NET - 欧盟 cookie 立法的现成解决方案?

c# - 如何分离 View 数据和 ViewModel 数据?

c# - P/Invoke c# 和 native c++

iphone - CGRectOffset 导致滑动方向错误

c# - 什么是 AsyncWCF` 中的 AsyncCallback 和 AsyncState?

c# - C# 中的 CreatePipe 和必要的权限

c# - 添加自定义控件mvvm caliburn

matplotlib - 在将轴保持在pyplot子图中的同时移除框架

ios - 如何检测 UIView View 与其他 UIView 的接近程度?