WPF Beginner - простой макет XAML не работает должным образом - PullRequest
1 голос
/ 25 марта 2010

Я только начал изучать WPF и последовал книге, чтобы сделать это приложение-образец калькулятора на XAML.Код XAML прилагается ниже.У меня нет специального кода для пользовательского интерфейса в файле xaml.cs.

Однако я вижу разницу между временем разработки и временем выполнения.Как вы можете видеть на прилагаемом скриншоте , левая верхняя кнопка калькулятора больше остальных.

Еще более странно то, что дизайнер, когда я редактирую XAML, правильно показывает кнопку.

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

Я использую VS2008, нацеливаясь на Framework 3.5, если это поможет.

Вот XAML:

<Window x:Class="TestWpf2008.Calculator"

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:TestWpf2008"
  Title="Calculator" FontFamily="Calibri" FontSize="15"   
  SizeToContent="WidthAndHeight" Loaded="Window_Loaded">
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary1.xaml"/>
            <ResourceDictionary>
                <SolidColorBrush x:Key="MyTitleColor" Color="Chocolate" />
                <Style TargetType="Button">
                    <Setter Property="Margin" Value="6"/>
                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Grid Background="{StaticResource PrettyBrush}">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" FontSize="24" 
               Name="Header"
               VerticalAlignment="Center" HorizontalAlignment="Center">Calculator</TextBlock>
    <TextBox Grid.ColumnSpan="4" Grid.Column="0" Grid.Row="1" Name="Display" 
             HorizontalContentAlignment="Left" Margin="5" />
    <Button Grid.Row="2" Grid.Column="0" Click="Button_Click">7</Button>
    <Button Grid.Row="2" Grid.Column="1" Click="Button_Click">8</Button>
    <Button Grid.Row="2" Grid.Column="2" Click="Button_Click">9</Button>

    <Button Grid.Row="3" Grid.Column="0" Click="Button_Click">4</Button>
    <Button Grid.Row="3" Grid.Column="1" Click="Button_Click">5</Button>
    <Button Grid.Column="2" Grid.Row="3" Click="Button_Click">6</Button>

    <Button Grid.Row="4" Grid.Column="0" Click="Button_Click">1</Button>
    <Button Grid.Row="4" Grid.Column="1" Click="Button_Click">2</Button>
    <Button Grid.Row="4" Grid.Column="2" Click="Button_Click">3</Button>


    <Button Grid.Row="5" Grid.Column="0" Click="Button_Click">0</Button>

    <Button Grid.Row="5" Grid.Column="3" Tag="{x:Static local:Operation.PLUS}" 
            Click="Op_Click">+</Button>
    <Button Grid.Row="4" Grid.Column="3" Tag="{x:Static local:Operation.MINUS}"
            Click="Op_Click">-</Button>
    <Button Grid.Row="3" Grid.Column="3" Tag="{x:Static local:Operation.TIMES}"
            Click="Op_Click">*</Button>
    <Button Grid.Row="2" Grid.Column="3" Tag="{x:Static local:Operation.DIVIDE}"
            Click="Op_Click">/</Button>

    <Button Grid.Row="5" Grid.Column="1" >.</Button>
    <Button Grid.Row="5" Grid.Column="2" Tag="{x:Static local:Operation.EQUALS}"
            Click="Op_Click">=</Button>

</Grid> </Window>

1 Ответ

0 голосов
/ 26 марта 2010

Из MSDN

Допустимо определять ресурсы в ResourceDictionary, который указывается как объединенный словарь, либо в качестве альтернативы указанию источника, либо в дополнение к любым ресурсам, включаемым из указанного источника. Однако это не обычный сценарий; Основной сценарий для объединенных словарей - объединение ресурсов из внешних расположений файлов. Если вы хотите указать ресурсы в разметке для страницы, вы должны определить их в основном ResourceDictionary, а не в объединенных словарях.

Так что вам просто нужно убрать стиль из объединенного ресурса

но я советую вам

ход

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
        <ResourceDictionary Source="Dictionary1.xaml"/>
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

в Application.Resources в App.xaml

держать

<Style TargetType="Button"> 
    <Setter Property="Margin" Value="6"/> 
</Style>

в Window.Resources

потому что это то, что вы обычно делаете с объединенными ресурсами из-за легкого повторного использования между проектами вашего 'Dictionary1.xaml'

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