Почему TextBox получает заполнение, когда Grid.Margin установлен в App.xaml? - PullRequest
5 голосов
/ 04 августа 2011

Простое окно:

<Window x:Class="MyApp.MainWindow" xmlns="..." xmlns:x="...">

<Window.Resources>
    <Style TargetType="Grid">
        <Setter Property="Margin" Value="8"/>
    </Style>
</Window.Resources>

<Grid>
    <TextBox VerticalAlignment="Top" HorizontalAlignment="Left">Test</TextBox>
</Grid>

</Window>

Это выглядит так:

Теперь мы удаляем Window.Resources:

<Window x:Class="MyApp.MainWindow" xmlns="..." xmlns:x="...">
<Grid>
    <TextBox VerticalAlignment="Top" HorizontalAlignment="Left">Test</TextBox>
</Grid>
</Window>

И добавить определение стиля к App.xaml:

<Application x:Class="MyApp.App" xmlns="..." xmlns:x="..." StartupUri="View\MainWindow.xaml">
<Application.Resources>
    <Style TargetType="Grid">
        <Setter Property="Margin" Value="8"/>
    </Style>
</Application.Resources>
</Application>

Странно, но теперь TextBox получает отступ:

Почему?

Ответы [ 2 ]

5 голосов
/ 04 августа 2011

Неявные стили для элементов, которые не являются производными от элемента управления (т. Е. Grid), будут применяться ко всем экземплярам этого элемента управления при размещении в ресурсах приложения.Но они не будут применяться к определенным случаям, когда стиль размещается где-либо еще.

Фактически, элементы внутри ControlTemplate являются исключением из неявных стилей для их типа, если только этот стиль не определен в ресурсах приложения.

Поскольку Grid не является элементом управления (т. Е. Он не является производным от Control), размещение его стиля в ресурсах приложения повлияет на каждую Grid в вашем приложении.Сюда входят сетки, определенные в шаблоне ControlTemplate элементов управления, например TextBox.

Более подробную информацию можно найти здесь .

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

Я полагаю, что текстовое поле по умолчанию содержит сетку при размещении внутреннего содержимого.Когда в ресурсах приложения используется стиль TextBox , Стиль сетки также применяется к Сетка внутри TextBox .

Но когда тот же Стиль сетки применяется в ресурсах окна (т. Е. После глобального моделирования), он не влияет на Сетка внутри TextBox .

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