2017-08-29 52 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(); 
     } 
    }