Вы должны установить Button.Template
. Также Grid.ColumnDefinitions
можно использовать, чтобы правильно установить положение и ширину элементов.
<Button Height="30" Content="Smaple text">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ContentPresenter HorizontalAlignment="Left" Grid.Column="0"
VerticalAlignment="Center"/>
<Canvas Background="AliceBlue" Grid.Column="1" />
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
Конструктор ожидает нулевой или один аргумент, который, если предоставлен, должен быть объектом. Если аргумент не предоставлен, по умолчанию используется пустой объект. Затем он проверяет (возможно, пустой) объект на свойства comparator
и initialValues
. Если эти свойства существуют в объекте, они извлекаются в эти имена переменных (comparator
и initialValues
) - в противном случае этим именам переменных присваиваются значения по умолчанию, (a, b) => a - b
для comparator
и []
для initialValues
]. [1 123]
Например,
new PriorityQueue()
приводит к PriorityQueue
с .comparator
из (a, b) => a - b
и initialValues
из []
, тогда как
new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })
приводит к [ 1116] с .comparator
из (a, b) => a.localeCompare(b)
и initialValues
из []
.
Если в передаваемом аргументе содержатся свойства, отличные от comparator
или initialValues
, они игнорируются.
Написано многословно, без параметров по умолчанию:
class PriorityQueue {
constructor(obj) {
if (obj === undefined) {
obj = {};
}
if (obj.comparator === undefined) {
obj.comparator = (a, b) => a - b;
}
if (!obj.initialValues === undefined) {
obj.initialValues = [];
}
// main constructor body starts here
this.comparator = obj.comparator;
this.data = obj.initialValues;
this.heapify();
}