0

Я создал DataTemplate с кнопки и поместил MinWidth и MinHeight в 0. Я установил ширину и высоту в 75 на сетке DataTemplate. В сетке есть граница, а MinWidth и MinHeight также установлены на 0. Ширина и высота границы установлены на авто (75).Кнопка DataTemplate width too large

Теперь, когда я нажимаю кнопку на моей странице, она равна 109.166664123535, а высота равна 75. При просмотре DataTemplate в Blend говорится, что Grid и его дети имеют ширину 75, а сам DataTemplate шире.

Как сделать весь DataTemplate width из 75, а не только детьми DataTemplate?

Редактировать 1 После предложений @Guttsy, это то, что я изменил код, чтобы выглядеть. Также обратите внимание, что NumberPadButtonStyle удаляет верхнее и нижнее заполнение на границе кнопок ControlTemplate. Код ниже:

<Grid HorizontalAlignment="Center" VerticalAlignment="Top"> 
    <Grid.Resources> 
     <Style x:Key="SetDominationsNumberPadButtonStyle" 
       BasedOn="{StaticResource NumberPadButtonStyle}" 
       TargetType="Button"> 
      <Setter Property="Width" Value="110" /> 
      <Setter Property="Height" Value="110" /> 
     </Style> 
    </Grid.Resources> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

    <Button Content="1" Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
    <Button Grid.Column="1" 
      Content="2" 
      Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
    <Button Grid.Column="2" 
      Content="3" 
      Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
    <Button Grid.Row="1" 
      Grid.Column="0" 
      Content="5" 
      Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
    <Button Grid.Row="1" 
      Grid.Column="1" 
      Content="6" 
      Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
    <Button Grid.Row="1" 
      Grid.Column="2" 
      Content="7" 
      Style="{StaticResource SetDominationsNumberPadButtonStyle}" /> 
</Grid> 

ответ

1

Если вы хотите, чтобы кнопка была 75 единиц в ширину, то вы должны установить ширину на самой кнопке, чтобы быть 75. Не форсируйте никаких особых ограничений ширины/высоты в вашем ControlTemplate. Вы никогда не сможете установить Width/Height в свой DataTemplate и иметь соответствие ActualWidth/ActualHeight вашего элемента управления Button, если кнопка не имеет хрома.

Если вы хотите, чтобы ваши кнопки выглядели последовательно, я бы рекомендовал установить MinWidth (в отличие от Width) на число, которое вы ожидаете использовать для большинства ваших кнопок. Таким образом, если вы решите локализовать свое приложение, вы сможете использовать более длинные переводы, чтобы вписаться в кнопки.

Примечание. Я считаю, что стили для кнопок и других элементов управления в приложениях Windows Phone и Windows Store по умолчанию оптимизированы для сенсорного управления, поэтому элементы управления будут немного больше, чем вы ожидаете. Я не знаю, идет ли это сейчас, потому что ваш вопрос неполный. Пожалуйста, включите некоторые XAML.

<UniformGrid Rows="3" Columns="3" VerticalAlignment="Center" HorizontalAlignment="Center"> 
    <UniformGrid.Resources> 
     <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}" x:Key="NumberPadButtonStyle"> 
      <Setter Property="Width" Value="75" /> 
      <Setter Property="Height" Value="75" /> 
      <Setter Property="Margin" Value="2" /> 
     </Style> 
    </UniformGrid.Resources> 

    <Button Content="1" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="2" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="3" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="4" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="5" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="6" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="7" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="8" Style="{StaticResource NumberPadButtonStyle}" /> 
    <Button Content="9" Style="{StaticResource NumberPadButtonStyle}" /> 
</UniformGrid> 
+0

Благодарим за быстрый ответ. Я делаю номерную панель и думаю, что установка ширины и высоты до 75 на DataTemplate будет лучшим подходом, поэтому мне нужно только настроить ее в одном месте. –

+0

@Michael Ну, вы, конечно, не хотите указывать его дюжину раз. Я обновил свой ответ с потенциальным решением. – Guttsy

+0

Это говорит мне, что «UniformGrid не поддерживается в проекте Windows Phone». Также у меня есть другие изменения стиля. Например, изменение цвета фона сетки и изменение цвета границы. –