WPF: Каковы лучшие практики с макетами - PullRequest
4 голосов
/ 13 августа 2011

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

На приведенном ниже снимке экрана показан вид, к которому я стремлюсь.Я также включил, какой код я уже написал.Тем не менее, это просто выводит основной заголовок и текст под ним с помощью простой StackPanel.

Мой первый вопрос о том, сколько «информации» и что нужно поместить в представление, а затем, что и как следует стилизовать.в моих ресурсах. xaml?Это может быть расплывчато, но я хочу понять, какие элементы управления я должен использовать в моем представлении, и какой код следует использовать в своих стилях.

Пример изображения WPF Control Example

MyView.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="20 0">
    <ItemsControl ItemsSource="{Binding MyModelList}" ItemTemplate="{StaticResource MyViewDataTemplate}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</ScrollViewer>

Resources.xaml

<DataTemplate x:Key="MyViewDataTemplate">
    <Border BorderThickness="0 0 0 1" BorderBrush="Black">
        <StackPanel>
            <Label Content="{Binding Heading}" FontSize="24" />
            <Label>
                <Label.Content>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="Card: {0}, {1}">
                                <Binding Path="PropertyA"></Binding>
                                <Binding Path="PropertyB"></Binding>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </Label.Content>
            </Label>
        </StackPanel>
    </Border>
</DataTemplate>

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

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

Ну, простое правило - поместить код, который можно повторно использовать в Ресурсах, и оставить его в основном макете. Например, скажем, вам нужно отображать текстовое поле во многих местах вашего интерфейса. Теперь вы можете поместить текстовое поле в виде фона, шрифта, переднего плана, размера и т. Д. В ресурс, чтобы при каждом использовании текстового поля эту информацию можно было легко использовать из ресурсов. Точно так же в случае изменений вам нужно будет вносить изменения только в одном месте, а не в каждом текстовом поле.

what are the controls I should be looking at to include in my View и what code should I be looking at to put in my styles.

Что касается первой части, это полностью зависит от того, какого сценария вы пытаетесь достичь. Из примера изображения Grid может использоваться с тремя столбцами, поскольку кажется, что есть три части вашего пользовательского интерфейса, то есть заголовок, а затем два текстовых блока. Поместите стековую панель с двумя текстовыми блоками внутри первого столбца (один для заголовка и один для небольшого описания под ним), и в следующих двух столбцах вы можете поместить один текстовый блок в каждый.

Теперь, касаясь вашего второго пункта, когда вы поместите текстовые блоки в столбцы таблицы, вы можете поместить информацию о стилях, например, синий фон и т. Д. В ресурсы

Я использовал этот XAML для создания структуры в изображении

 <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <StackPanel Orientation="Vertical" Grid.Column="0">
            <TextBlock FontSize="20">Hilighted</TextBlock>
            <TextBlock FontSize="10">Card</TextBlock>
        </StackPanel>

        <StackPanel Orientation="Vertical" Grid.Column="1">
            <TextBlock FontSize="20">0</TextBlock>
            <TextBlock FontSize="10">Text</TextBlock>
        </StackPanel>

        <StackPanel Orientation="Vertical" Grid.Column="2">
            <TextBlock FontSize="20">0</TextBlock>
            <TextBlock FontSize="10">Text</TextBlock>
        </StackPanel>
    </Grid>

Теперь это простые элементы управления без каких-либо стилей. Вы можете помещать стили в ресурсы и применять их к текстовым блокам

1 голос
/ 13 августа 2011

Ответ на вопрос "я должен поместить это в Представление или в Ресурсы?" получается ответить самому себе. Если вы поместите его в представление, с которого я начинаю большинство вещей, то в конечном итоге это будет или не станет проблемой. Если это становится проблемой, просто выдернуть вещь (какой бы она ни была) из поля зрения и превратить ее в ресурс.

В конечном счете, как указывает Харис Хасан, необходимость повторного использования - это то, что определяет это решение. Если вы не знаете, что вам понадобится повторно использовать стиль, здесь применяется принцип YAGNI, как и во всех других вещах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...