Проблемы WPF с макетом управления - PullRequest
0 голосов
/ 16 января 2011

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

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>

Ответы [ 2 ]

1 голос
/ 16 января 2011

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

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

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

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

1 голос
/ 16 января 2011

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

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

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

...