2013-07-22 24 views
13

Mam niektóre radiobuttons w aplikacji, która działa z dotykiem. Ponieważ użytkownik końcowy może mieć grube palce, chcę, aby okrąg i tekst był większy.Wymiarowanie radiobutton

Problem polega na tym, że mogę tylko powiększyć tekst, a nie krąg w radiobuttonie.

<RadioButton VerticalAlignment="Center" x:Name="rbtnContainers" Click="SetContainers" FontSize="18">Containers</RadioButton> 

Używanie wzrostu również nie działa. To sprawia, że ​​radiobutton jest większy, ale koło pozostaje takie samo.

Każda wskazówka lub odpowiedź jest doceniana.

+0

użyj go w oknie podglądu i zmień jego wysokość – whoisthis

+0

+1 za myślenie o grubych palcach świata! –

Odpowiedz

23

To powinno działać dla Ciebie.

<Viewbox Height="40"> 
    <RadioButton></RadioButton> 
</Viewbox> 

Kolejną alternatywą jest napisanie własnej kontrolki ControlTemplate dla elementu RadioButton i zmiana jej wyglądu zgodnie z oczekiwaniami.

+0

Działa dobrze, dziękuję! –

+0

z jakiegokolwiek powodu, kiedy to stosuję, to zakłóca wyrównanie radiobuttonu – Maslow

+0

Very Nice! jest to szybkie i łatwe rozwiązanie, a nie tworzenie własnego szablonu. – t4taurus

2

Aby zmienić rozmiar tylko okręgu, można użyć szablonu RadioButton i zmienić Width i Height z BulletChrome.

<ControlTemplate TargetType="RadioButton" x:Key="CustomRadioButtonStyle" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> 

     <BulletDecorator Background="#00FFFFFF"> 
      <BulletDecorator.Bullet> 
       <mwt:BulletChrome Height="25" Width="25" Background="{TemplateBinding Panel.Background}" BorderBrush="{TemplateBinding Border.BorderBrush}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}" RenderPressed="{TemplateBinding ButtonBase.IsPressed}" IsChecked="{TemplateBinding ToggleButton.IsChecked}" IsRound="True" /> 
      </BulletDecorator.Bullet> 
      <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" /> 
     </BulletDecorator> 

     <ControlTemplate.Triggers> 

      <Trigger Property="ContentControl.HasContent"> 

       <Setter Property="FrameworkElement.FocusVisualStyle"> 

        <Setter.Value> 

         <Style TargetType="IFrameworkInputElement"> 

          <Style.Resources> 
           <ResourceDictionary /> 
          </Style.Resources> 

          <Setter Property="Control.Template"> 

           <Setter.Value> 

            <ControlTemplate> 
             <Rectangle Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2" Margin="14,0,0,0" SnapsToDevicePixels="True" /> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </Setter.Value> 
       </Setter> 

       <Setter Property="Control.Padding"> 

        <Setter.Value> 
         <Thickness>4,0,0,0</Thickness> 
        </Setter.Value> 
       </Setter> 

       <Trigger.Value> 
        <s:Boolean>True</s:Boolean> 
       </Trigger.Value> 
      </Trigger> 

      <Trigger Property="UIElement.IsEnabled"> 

       <Setter Property="TextElement.Foreground"> 

        <Setter.Value> 
         <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> 
        </Setter.Value> 
       </Setter> 

       <Trigger.Value> 
        <s:Boolean>False</s:Boolean> 
       </Trigger.Value> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
+0

Otrzymuję > Nazwa "BulletChrome" nie istnieje w przestrzeni nazw "clr-namespace: Microsoft.Windows.Themes; assembly = PresentationFramework.Aero". – Maslow

+0

ten projekt wymagał odniesienia do 'PresentationFramework.Aero' lub dowolnego miejsca, które definiuje' BulletChrome', jak zdefiniowano w https://msdn.microsoft.com/en-us/library/microsoft.windows.themes.bulletchrome(v = vs.110) .aspx – Maslow

0

Bardziej z włamać byłoby spróbować po prostu przekształcić obiekt z czymś takim ...

<RadioButton.RenderTransform> 
    <CompositeTransform ScaleX="5" ScaleY="5"/> 
</RadioButton.RenderTransform> 

Wystarczy pamiętać, że ScaleX i ScaleY musi być równa, w przeciwnym wypadku przedmiot będzie wyglądał na rozciągnięty niezręcznie

Zgodnie z moimi własnymi eksperymentami, renderowanie tego nie jest w ogóle pomieszane (np. brak problemów z wyrównaniem itp.)