Окно навигации по макету

Я хотел бы создать оконное приложение WPF, используя следующую структуру макета. Рассмотрим заголовок и кнопку в левом фрейме/окне, например «Мастер-страницы» в ASP.Net. В правом кадре должно быть окно навигации WPF.

Когда я включаю окно навигации в качестве элемента пользовательского интерфейса на последней панели стека, это выдает меня и ошибку. Как мне спроектировать весь макет в соответствии со скриншотом ниже? Спасибо

<Window x:Class="MainWindow"
     xmlns:local="clr-namespace:ClientSocket"        
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title=" Desktop" Height="841" Width="1271" WindowStartupLocation="CenterScreen" WindowState="Maximized">
    <DockPanel>
        <StackPanel DockPanel.Dock ="Top"  Orientation="Horizontal" Background="Red">
            <TextBlock  Background="red"  FontSize ="36" Width="482" >
           Main Title
            </TextBlock>          
        </StackPanel>
        <StackPanel Background="LightGray" DockPanel.Dock ="Left" Width="145">
            <Button Content="Button1" Name="btnAndroid" Width="119" Margin="3" BorderBrush="{StaticResource {x:Static SystemColors.InfoBrushKey}}" />
            <Button Content="Button2" Name="btnDownloads" Width="119" Margin="3" BorderBrush="{StaticResource {x:Static SystemColors.InfoBrushKey}}" />
            <Button Content="AddNewDownloads" Height="37" Name="Button1" Width="133" />
        </StackPanel>
        <StackPanel>
        <NavigationWindow Height="auto" Width="auto" Name="nwMain" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderBrush="Blue" BorderThickness="1"  />
        </StackPanel>
    </DockPanel>
</Window>

введите здесь описание изображения


person Bih Cheng    schedule 24.11.2011    source источник


Ответы (1)


Вы не можете добавить окно в качестве дочернего элемента чего-либо, вместо этого вы можете использовать вложенный элемент управления навигацией, он называется Frame.

С точки зрения макета я бы рекомендовал Grid с две строки, содержит еще одну сетку ( в Grid.Row="1") с двумя столбцы.

DockPanels — это печальные элементы управления, которые, вероятно, не следует использовать, если только кто-то не направит на вас пистолет и не скажет вам об этом.

person H.B.    schedule 24.11.2011
comment
Привет Х.Б. Я могу попробовать удалить док-панель и использовать сетку для компоновки этой структуры, но это не отвечает на вопрос о том, как поместить окно навигации в другое окно (см. код xaml выше). На самом деле я не хочу помещать окно навигации в другое окно, так как это ошибка времени выполнения, но ищу решение, которое может создать макет, как показано на снимке экрана выше. - person Bih Cheng; 24.11.2011
comment
@simeh: Windows не может быть дочерним элементом чего-либо, если у вас есть что-то, что нужно разместить внутри другого окна, вы должны преобразовать его в UserControl. На самом деле вы должны просто сделать все UserControl, чтобы никогда не сталкиваться с такими проблемами. - person H.B.; 24.11.2011
comment
@simeh: В этом случае вы не можете это изменить, поэтому, я думаю, вам следует использовать элемент управления Frame. - person H.B.; 24.11.2011
comment
На самом деле я в настоящее время использую метод фрейма, прежде чем я изменил его на NavigationWindow, чтобы попробовать. Причина, по которой я меняюсь, заключается в том, что когда я использую фрейм для открытия другой страницы, последующие страницы будут перекрывать текущую страницу и создавать многослойный эффект... посмотрите здесь скриншот и обратите внимание на толстую синюю линию, она стала многослойной imageshack.us/photo/my-images/819/pageserror.png - person Bih Cheng; 24.11.2011
comment
@simeh: Как вы их открываете? Вы должны просто переходить с одной страницы на другую, этого не должно происходить. - person H.B.; 24.11.2011
comment
Мне удалось изменить свой код, чтобы использовать макет Grids вместо DockPanels. Мне также удается получить желаемый макет с помощью окна навигации на правой панели. Однако, когда я нахожусь на странице, открытой окном навигации, если я хочу вызвать фрейм главной страницы, чтобы открыть другую страницу, как я могу получить доступ к этому объекту? Спасибо - person Bih Cheng; 24.11.2011
comment
@simeh: я не знаю. Вы читали обзор навигации и его подстраницы? - person H.B.; 24.11.2011