2011-04-01 78 views
0

我需要寫一個控制,這將是這樣的:不能得到正確的標籤尺寸

Click Here to se callout

問題是,我不能讓標籤的實際尺寸重繪我的矩形幾何形狀。標籤的高度總是比真正佔據屏幕的空間大得多。我不知道該怎麼辦。這裏是代碼:

<Popup x:Class="Controls.Callout" 
     x:ClassModifier="internal" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" > 
    <Grid> 
     <Image> 
      <Image.Source> 
       <DrawingImage> 
        <DrawingImage.Drawing > 
         <GeometryDrawing Brush="Orange" x:Name="geometryDrawing"> 
          <GeometryDrawing.Pen> 
           <Pen Brush="Black" Thickness="2"/> 
          </GeometryDrawing.Pen> 
          <GeometryDrawing.Geometry> 
           <CombinedGeometry GeometryCombineMode="Union"> 
            <CombinedGeometry.Geometry1> 
             <RectangleGeometry x:Name="rectangel" 
                    RadiusX="15" RadiusY="15" 
                     Rect="0,30, 300,100" 
                    /> 
            </CombinedGeometry.Geometry1> 
            <CombinedGeometry.Geometry2> 
             <PathGeometry> 
              <PathFigure StartPoint="30,30" IsClosed="False"> 
               <PolyLineSegment Points="15,0, 90,30"/> 
              </PathFigure> 
             </PathGeometry> 
            </CombinedGeometry.Geometry2> 
           </CombinedGeometry> 
          </GeometryDrawing.Geometry> 
         </GeometryDrawing> 
        </DrawingImage.Drawing> 
       </DrawingImage> 
      </Image.Source> 
     </Image> 
     <Label Padding="5 20" MaxWidth="300" Name="myLabel" FontSize="16" > 
        <!--Content="{Binding}">--> 
       <!--MaxHeight="100" MaxWidth="300">--> 
      <AccessText TextWrapping="Wrap" MaxHeight="50"/> 
     </Label> 
    </Grid> 
</Popup> 

後面的代碼:

internal partial class Callout : Popup 
{ 
    public Callout() 
    { 
     InitializeComponent(); 
    } 
    protected override void OnOpened(System.EventArgs e) 
    { 
      rectangel = new RectangleGeometry(new Rect(0,30,300, myLabel.Height/2)); 
    } 
} 

回答

1

爲什麼不使用帶圓角的矩形,一個TextBlock,並在矩形的上面一些形狀的網格,使標註「指針「?作爲網格,矩形可以自動擴展爲TextBlock所需的全尺寸。

例如,您可以創建一個UserControl(或一個完整的模板化控件),並給它一個MaxWidth以便文本換行。然後將該控件放在Canvas中,以便它可以確定它自己的尺寸。

<UserControl MaxWidth="200"> 
    <Grid > 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 

     <Rectangle Grid.Row="1" RadiusX="50" RadiusY="50" 
      StrokeThickness="8" Stroke="Gray" /> 
     <!-- Here will be pointer in Grid.Row="0"--> 
     <TextBlock Grid.Row="1" Name="myLabel" Margin="20" Foreground="Black" 
      Text="This is the textblock....." FontSize="20" TextWrapping="Wrap" /> 

    </Grid> 
</UserControl> 
+0

我試圖這樣: <! - 這裏將指針 - > <矩形半徑X = 「150」 半徑= 「150」/> 但它不起作用。請你能提供一個你的意思的例子嗎? – Seekeer 2011-04-03 15:48:03

+0

謝謝,你幫了我很多! – Seekeer 2011-04-04 15:49:10