2012-10-02 37 views
3

我想畫一個顯示內容的用戶控件。基本上我想要一個自定義框,無論內容是什麼。如何在不縮放線寬的情況下縮放路徑幾何圖形以適合視圖框?

我想要那個盒子縮放,所以我正在使用一個viewbox。不幸的是,viewbox轉換整個顯示的控件,而不僅僅是框的幾何形狀。這導致用於邊框的線條被拉伸。

這裏是我的控制,我需要伸展點的矢量路徑,以適應父盒。 Here is what I want to scale to fill the parent box

這裏是不希望的結果,我得到。

enter image description here

是否有STRETCH時到充滿幾何同時不結垢白描厚度什麼好辦法?

我知道我可以用這種簡單的幾何圖形這幾個其他的方式,但是在我的實際應用程序的路徑要複雜得多。

這裏是那些有興趣誰在我的控制代碼:

<UserControl.Template> 
    <ControlTemplate TargetType="{x:Type UserControl}"> 
     <Grid> 
      <Viewbox Stretch="Fill"> 
       <Canvas Name="svg2" Margin="0" Width="100" Height="63" > 
        <Path Fill="#FFFFFFFF" Stroke="#FF6800FF" StrokeThickness="4" StrokeStartLineCap="Flat" StrokeEndLineCap="Flat" StrokeLineJoin="Miter" StrokeMiterLimit="4" Name="rect2985" RenderTransformOrigin="0,0"> 
         <Path.Data> 
          <PathGeometry FillRule="Nonzero" Figures="M 0,250 L 0,50 L 150,50 L 200,-0.96 L 250,50 L 400,50 L 400,250 L 0,250z"> 
           <PathGeometry.Transform> 
            <TransformGroup> 
             <ScaleTransform ScaleX=".24" ScaleY=".23" /> 
            </TransformGroup> 
           </PathGeometry.Transform> 
          </PathGeometry> 
         </Path.Data> 

         <Path.RenderTransform> 
          <TransformGroup> 
           <TranslateTransform X="2.1" Y="3" /> 
          </TransformGroup> 
         </Path.RenderTransform> 
        </Path> 

        <Grid Canvas.Top="17" Width="90" HorizontalAlignment="Center" Height="40" Canvas.Left="5"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"   
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Grid> 

       </Canvas> 
      </Viewbox> 
     </Grid> 
    </ControlTemplate> 
</UserControl.Template> 

回答

3

取下視框,並分割你的「邊界」爲固定大小,水平伸展,和垂直拉伸件,如下圖:

Content Decorator

從這裏我們可以看出,列寬(從左至右)應爲:

  1. 固定
  2. 變量/拉伸
  3. 固定
  4. 變量/拉伸
  5. 固定

和行高度(從頂部至底部)應該是:

  1. 固定
  2. 變量/拉伸
  3. 固定

從這裏你就可以構建XAML網格,你的「邊界」的每個部分放置到相應的位置。這樣,當控件的高度發生變化時,只有垂直線被拉伸。類似地,當內容的寬度改變時,只有水平線會被拉伸。

相關問題