2012-04-13 38 views
6

Tôi có một Điều khiển WPF.Vẽ một cây thánh giá trong WPF

tôi cần phải có trong nền ngang, như thế này:
enter image description here

Sau đó, tôi muốn có thể thêm các điều khiển khác trên tôi "vượt qua" background: enter image description here

Làm thế nào nên Tôi vẽ thập tự giá, biết rằng khi tôi kiểm soát lại quyền kiểm soát, cây thánh giá phải theo kích thước của nó?

Trả lời

11

Cách nhanh chóng và bẩn là sử dụng các đường và liên kết các tọa độ của chúng với phần mở rộng th và chiều cao của một số thùng chứa mẹ. Một cái gì đó như thế này:

<Grid Name="parent"> 
    <Line X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
      Stroke="Black" StrokeThickness="4" /> 
    <Line X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" /> 
</Grid> 

Sử dụng một mạng lưới như phụ huynh có nghĩa là bất kỳ những đứa trẻ khác được bổ sung vào lưới sau đường sẽ xuất hiện trên đầu trang của các dòng:

<Grid Name="parent"> 
    <Line X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
      Stroke="Black" StrokeThickness="4" /> 
    <Line X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" /> 
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label> 
</Grid> 
+0

+1 chú ý đến từng chi tiết :) –

0
<Line X1="10" Y1="10" X2="50" Y2="50" Stroke="Black" StrokeThickness="4" /> 
    <Line X1="10" Y1="50" X2="50" Y2="10" Stroke="Black" StrokeThickness="4" /> 

nếu bạn tự hỏi nơi giá trị x và y đến, chỉ cần vẽ ra tọa độ Descartes và cắm vào

line 1 - point 1:(10,10), point 2:(50,50) 
line 2 - point 1:(10,50), point 2:(50,10) 

ref trên hình dạng http://msdn.microsoft.com/en-us/library/ms747393.aspx

đặt nhãn sau/dưới Line các yếu tố trong XAML, điều đó sẽ làm cho nó vẽ trên các dòng

+1

BTW, tôi chỉ nhận thấy tên của bạn, tôi có nguồn gốc từ Chisinau, thế giới nhỏ bé, dù sao, hy vọng điều này giúp bạn bắt đầu –

+1

Không thay đổi kích thước. –

+1

bah, đó là phải quên về điều đó, tôi sẽ thêm rằng trong một chút –

5

Một cách khác để giải quyết này là để chỉ cần đặt mọi thứ vào một số Viewbox và sử dụng Stretch="fill". Nó sẽ xử lý kích thước lại cho bạn trong khi duy trì tỷ lệ thích hợp. Bạn sẽ không cần phải sử dụng databinding trong trường hợp này.

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
    <Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="Fill"> 
     <Grid> 
      <Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="1" /> 
      <Line X1="0" Y1="100" X2="100" Y2="0" Stroke="Black" StrokeThickness="1" /> 
     </Grid> 
    </Viewbox> 
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label> 
</Grid> 
+3

Một điều cần lưu ý khi sử dụng ViewBox là nó sẽ thu phóng độ dày của các đường thẳng (tức là khi bạn thay đổi kích thước cửa sổ của mình, các đường sẽ dày hơn). Có hay không điều này là mong muốn, là một câu hỏi riêng biệt. –

+0

@MattBurland Đúng vậy. Cảm ơn bạn đã đề cập đến nó. –

1

Câu trả lời của Matt Burland làm ứng dụng của tôi không ngừng nhấp nháy (vì tôi giả sử các tài liệu tham khảo để 'mẹ' thay đổi kích cỡ nó ... và sau đó thay đổi kích cỡ các dòng, vv ...)

Vì vậy, tôi đã sử dụng Stretch = Fill và chặn tham chiếu đến 'parent'. Hoạt động khá tốt ngay bây giờ.

<Line x:Name="Line1" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill" 
       X1="0" Y1="0" X2="1" Y2="1" /> 
<Line x:Name="Line2" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill" 
       X1="0" Y1="1" X2="1" Y2="0" /> 

Đây là một sự pha trộn từ giải pháp này và điều này one

Các vấn đề liên quan