簡體   English   中英

在設計時訪問UserControl的子級

[英]Accessing children of UserControl at design time

Windows 8樣式應用程序(例如“ Metro”),Visual Studio 2012,XAML。

我有一個從Canvas派生的UserControl。 它有一個子元素-一個多邊形,其數據綁定到一個屬性(實現了INotifyPropertyChanged):

<Canvas x:Name="MyPolygon">
    <Polygon Points="{Binding ElementName=MyPolygon,Path=MyPoints}" ... />
</Canvas>

如果我在XAML中的其他地方實例化了該控件,並傳入了一個字符串,則會設置該屬性並在設計時和運行時正確渲染Polygon:

<local:MyPolygon MyPoints="..." />

但是,更改該字符串中的值很麻煩。 設計人員希望有一些UI結(如Ellipses)在設計時可見,而在運行時不可見的集合,以便他們可以將其拖到設計器中,並讓Polygon即時重建其幾何形狀:

<local:MyPolygon>
    <Ellipse Canvas.Left="204" Canvas.Top="57" ... />
    <Ellipse Canvas.Left="166" Canvas.Top="30" ... />
    ...
</local:MyPolygon>

基本上,我想將幾​​何信息保留在(擴展).Children中。 這可能嗎?

(可能有一些事件/構造函數,控件可以檢查其.Children(在插入了橢圓之后),檢索其坐標並構建MyPoints。設計人員將必須觸發該事件,以便幾何在設計時可見。

你有沒有看設計數據像這樣

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    GetSampleData();
}
else GetRealData();

要么

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

<CollectionViewSource
  x:Name="groupedItemsViewSource"
  Source="{Binding Groups}"
  IsSourceGrouped="true"
  ItemsPath="Items"
  d:Source="{Binding ItemGroups, 
    Source={d:DesignInstance Type=data:SampleDataSource, 
      IsDesignTimeCreatable=True}}"/>

因此,我最終在與橢圓相同的級別上創建了多邊形。

<Polygon Points="{Binding ElementName=MyPoints,Converter={StaticResource PolygonConverter}}" ... />
<Canvas x:Name="MyPoins">
    <Ellipse Canvas.Left="228" Canvas.Top="69" ... />
    <Ellipse Canvas.Left="166" Canvas.Top="30" ... />
    ...
</Canvas>

綁定轉換器將對象的所有.Children的坐標轉換為字符串。

這在設計時和運行時均有效。

不幸的是,為了讓VS設計人員刷新視圖並獲取更改,必須在移動Ellipes之后重新構建項目,這使設計過程比以前想象的要直觀得多。 :/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM