2011-02-02 40 views
5

Tôi muốn có canvas trong xaml nơi tôi đặt một số biểu tượng. Những biểu tượng là đa giác như thế này một:Đa giác có thể tái sử dụng

<Polygon Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/> 

Nhưng tôi muốn sử dụng một biểu tượng nhiều lần, vì vậy tôi muốn xác định nó trong các nguồn lực và bao gồm nó bằng cách tham chiếu vào bức tranh tại một vị trí nhất định, cách nọ cách kia như thế này :

<Page.Resources> 
    <Polygon Key="icon1" Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/> 
    <Polygon Key="icon2" Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/> 
    ... 
</Page.Resources>  
<Canvas> 
    <Polygon Reference="icon1" X="0" Y="0"/> 
    <Polygon Reference="icon2" X="10" Y="10"/> 
    <Polygon Reference="icon1" X="20" Y="20"/> 
    ...   
</Canvas> 

Tôi đã tìm thấy giải pháp khả thi trên http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx nơi đa giác được lưu trữ trong hình vẽ, nhưng có vẻ là nhiều chi phí.

Ai đó có ý tưởng tốt hơn về cách giải quyết vấn đề này?

Trả lời

7

Có lẽ phương pháp rõ ràng và linh hoạt nhất là tạo UserControl. Bạn có thể thêm một tệp mới kiểu UserControl từ trình khám phá giải pháp, thêm Đa giác của bạn vào lưới 'LayoutRoot' mà Visual Studio sẽ tạo. Sau đó, bạn có thể tạo bao nhiêu trường hợp tùy thích kiểm soát người dùng của mình!

Tuy nhiên, kiểm tra các vấn đề tương tự trên SO, bạn có thể sử dụng điều khiển nội dung để hiển thị đa giác, lưu ý, bạn sẽ phải sử dụng x: Shared = "false" để đảm bảo rằng bạn không cố gắng sử dụng lại cùng một đa giác mỗi lần.

<Page.Resources> 
    <Polygon x:Key="icon1" x:Shared="False" 
      Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/> 
    <Polygon x:Key="icon2" x:Shared="False" 
      Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/> 
    ... 
</Page.Resources>  
<Canvas> 
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="0"/> 
    <ContentControl Content="{StaticResource icon2}" Canvas.Top="0" Canvas.Left="10"/> 
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="20"/> 
    ...   
</Canvas> 

Xem sau:

+0

Tôi đã nghĩ đến điều này, nhưng tôi nghĩ rằng, có phải là một giải pháp dễ dàng hơn với ít chi phí. Nó chỉ là một đa giác nhỏ. – SpeziFish

+0

Xem câu trả lời cập nhật của tôi - hy vọng điều này sẽ hữu ích! – ColinE

+0

Wow, rất đẹp, chính xác những gì tôi đang tìm kiếm, cảm ơn! – SpeziFish

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