WPF control-template: зачем указывать сетку без ColumnDefinations/RowDefinations в качестве элемента outter?
Я читал Программирование WPF, вот один из примеров шаблона управления:
<Button DockPanel.Dock="Bottom" x:Name="addButton" Content="Add">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Ellipse Width="128" Height="32" Fill="Yellow" Stroke="Black" />
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
Мне интересно, почему вы используете сетку, а не более простую панель, такую как холст? Поскольку мы не decalre любой строки/столбцы?
Спасибо!
1 ответ:
Если вы не задаете какие-либо строки или столбцы, то каждый из них является неявным, что дает вам одну ячейку сетки. Таким образом, и
Если бы вы использовалиEllipse, иContentPresenterзанимают одну и ту же ячейку сетки. Z-порядок элементов, добавляемых в одну ячейку, определяется порядком их добавления. В этом случаеContentPresenterпоявится "поверх"Ellipse.CanvasвместоGrid, размер детей не был бы ограничен размером контейнера. Это потому, что ACanvasделает не накладывать никаких ограничений размера на своих детей, как это делаетGrid. Поэтому вам придется указать размер дляEllipseиContentPresenter, и вам нужно будет знать размерCanvas, чтобы установить этот размер. Следовательно, это просто намного проще и интуитивно понятнее, используяGrid.