2017-08-29 55 views
0

我有一个wpf渲染大小的奇怪问题,试图为单选按钮编写自定义模板,以便它可以通过分辨率进行缩放。 在VS XAML预览中它看起来应该是这样,但是当我运行应用程序时,它变成了香蕉。WPF在调试时渲染大小问题

这是VS预览:

Preview

应用:

App

所以,就像我所看到的问题是在呈现大小:

Grid render size

Rectangle

我尝试过没有网格,高度和宽度设置为自动等,每次它在VS预览中呈现没有任何问题,但我很快调试它(F5)它只是去一些巨大的渲染大小值。调整窗口大小没有区别。

XAML代码:

 <Style TargetType="{x:Type RadioButton}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type RadioButton}"> 
         <BulletDecorator> 
          <BulletDecorator.Bullet> 
           <Border Background="{x:Null}" x:Name="PART_Border" Width="{Binding ActualHeight, ElementName=ButtonPanel}" Height="{Binding ActualHeight, ElementName=ButtonPanel}" 


           > 
            <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 

          <Rectangle Margin="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.03}" 
             Fill="{x:Null}" 
             RadiusX="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.10}" 
             RadiusY="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.10}" 
             Stroke="#FFE0E000" 
             StrokeThickness="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.07}" 
             Width="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.94}" 
             Height="{Binding 
               Converter={StaticResource PercentageConverter}, 
               ElementName=ButtonPanel, 
               Path=ActualHeight, 
               ConverterParameter=0.94}" 
             /> 

            </Grid> 
           </Border> 
          </BulletDecorator.Bullet> 
         </BulletDecorator> 


         <ControlTemplate.Triggers> 
          <Trigger Property="IsChecked" Value="True"> 
           <Setter TargetName="PART_Border" Property="Opacity" Value="1"/> 
          </Trigger> 
          <Trigger Property="IsChecked" Value="False"> 
           <Setter TargetName="PART_Border" Property="Opacity" Value="0.5"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

谢谢

+0

对于加分,我可以添加我在单选按钮模板中的自定义属性,如文本字体,矩形笔画的颜色,矩形中的图像等等? :) – ostomac

+1

检查你是否解析你的'0.94'好,如果你的转换器中有“不变的culutre”,那么0.94就是94.这可能是问题所在。 – sTrenat

+0

是的,这是问题,thx很多 – ostomac

回答

0

问题是一个值转换器,如果有人在这里有同样的问题,解决的办法:

public class PercentageConverter : IValueConverter 
    { 
     public object Convert(object value, 
      Type targetType, 
      object parameter, 
      System.Globalization.CultureInfo culture) 
     { 

      double _value = Double.Parse(value.ToString(), CultureInfo.CurrentCulture); 
      double _parameter = Double.Parse(parameter.ToString(), culture); 
      return _value * _parameter; 
     } 

     public object ConvertBack(object value, 
      Type targetType, 
      object parameter, 
      System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    }