2011-01-16 2 views
0

Я делаю приложение, которое подключается к нашему биллинговому программному обеспечению, используя его API, и я сталкиваюсь с несколькими проблемами, требующими правильной работы макета.Проблемы с WPF с макетом управления

alt text

Я хочу сделать так, что, когда один из расширителей минимизирован, то другое окно заполняет пробел, и когда он расширяется снова другой расширитель возвращается туда, где она была. Прямо сейчас, когда стрелка нажимается на одну, есть только пустой пробел. Я использовал DockPanel в качестве родителя, который, как я предполагал, автоматически сделает это, но он не работает.

Второй вопрос, есть ли способ сделать эти области изменяемыми по размеру? Я не хочу стараться слишком усердно, позволяя пользователю отстыковывать меню (даже не знаю, возможно ли это с помощью простого WPF), но было бы неплохо, если бы они могли изменить их ширину/высоту.

Кроме того, только вопрос новичка на C#, но что эквивалентно заголовочному файлу C++? Похоже, вы просто используете файлы .cs, но я не уверен. Я хочу извлечь все мои функции, которые вытаскивают данные из программного обеспечения для выставления счетов и помещают их в другой файл для очистки кода.

Вот мой XAML ...

<Window x:Class="WpfApplication3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Billing Management" Height="550" Width="754" xmlns:shared="http://schemas.actiprosoftware.com/winfx/xaml/shared" WindowStartupLocation="CenterScreen" WindowStyle="ThreeDBorderWindow"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="22" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Menu Height="22" Name="menu1" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" HorizontalContentAlignment="Left" IsEnabled="True" IsMainMenu="True"> 
      <MenuItem Header="_File"> 
       <MenuItem Header="_Open" /> 
       <MenuItem Header="_Close" /> 
       <Separator/> 
       <MenuItem Header="_Exit" /> 
      </MenuItem> 
     </Menu> 
      <TabControl Name="tabControl1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" BorderThickness="1" Padding="0" TabStripPlacement="Bottom" UseLayoutRounding="False" FlowDirection="LeftToRight" Grid.Row="1"> 
       <TabItem Header="Main" Name="tabItem1" Margin="0"> 
        <DockPanel Name="dockPanel1" LastChildFill="True"> 
         <ListBox Height="100" Name="listBox3" DockPanel.Dock="Top" /> 
         <ListBox Name="listBox4" Width="200" DockPanel.Dock="Right" /> 
         <DockPanel Height="Auto" Name="dockPanel2" Width="Auto" VerticalAlignment="Stretch" LastChildFill="True"> 
          <shared:AnimatedExpander Header="Staff Online" Width="200" Name="expanderStaffOnline" IsExpanded="True" Height="194" BorderThickness="0" DockPanel.Dock="Top" VerticalContentAlignment="Stretch"> 
            <ListBox Name="listboxStaffOnline" Width="Auto" Height="Auto" Margin="0" VerticalAlignment="Stretch" Loaded="listboxStaffOnline_Loaded" /> 
          </shared:AnimatedExpander> 
          <shared:AnimatedExpander Header="Test Menu 2" Height="Auto" Name="animatedExpander1" BorderThickness="1" Margin="0,0,0,0" IsExpanded="True" VerticalContentAlignment="Stretch"> 
            <ListBox Height="Auto" HorizontalAlignment="Stretch" Name="listBox6" VerticalAlignment="Stretch" Margin="0" BorderThickness="1" /> 
          </shared:AnimatedExpander> 
         </DockPanel> 
        <ListBox Height="100" Name="listboxAdminLogs" DockPanel.Dock="Bottom" Loaded="listboxAdminLogs_Loaded" /> 
         <ListBox Name="listBox5" /> 
        </DockPanel> 
       </TabItem> 
       <TabItem Header="Support" Name="tabItem2" Margin="0"> 
       </TabItem> 
      <TabItem Header="Clients" /> 
      <TabItem Header="Billing" /> 
      <TabItem Header="Orders" /> 
     </TabControl> 
    </Grid> 
</Window> 
+0

Еще один быстрый вопрос. Есть ли какой-то контроль, который дает тот же вид, что и «строка заголовка» на расширителях? Я хотел бы унифицировать свой интерфейс и дать другие заголовки заголовков других разделов, но я не хочу, чтобы они могли расширять/сводить к минимуму некоторые из них. –

ответ

1

Вы должны разместить свои расширители в сетке, которая позволит расширять и заполнять содержимое автоматически. для определения ширины/высоты строки/столбца задано значение «Авто» или *.

Если вы хотите изменить размер, вам необходимо использовать GridSplitter; см. http://www.wpftutorial.net/GridLayout.html для получения дополнительной информации.

Я не знаю, C++, поэтому не могу сказать, что вам нужен эквивалент файлов заголовков, но я думаю, что то, что вы пытаетесь сделать, возможно с помощью частичных классов; см. http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.80).aspx для получения дополнительной информации.

И, наконец, чтобы ответить на ваш вопрос в ваших комментариях; Чтобы получить единообразный внешний вид для всех элементов управления в WPF, вам необходимо создать пользовательские стили, которые используют общий набор цветов/кистей.

1

Я предлагаю вам поставить расширители в сетке и установить высоту строки из gridrows в авто. Чтобы сделать его изменяемым по размеру, просто добавьте GridSplitters в промежутках между строками этой сетки.

Что касается вашего добавленного вопроса: я думаю, что было бы лучше скопировать стиль заголовков расширителей и использовать его для ярлыка или другого заголовка.

Также (много вопросов в этом): C# не имеет файлов заголовков.

+0

Использование GridLength Auto и GridSplitters в то же время не работает, потому что GridSplitters явно задают GridLength в тот момент, когда вы их используете. –

+0

Так что просто замените DockPanel сеткой, используя высоту строки, установленную в Auto? Я еще не смотрел GridSplitters, но это звучит неплохо, я проверю это. Для заголовков ярлыки были бы лучшим вариантом? –

Смежные вопросы