0

幅が指定されていない境界線のActualWidthにアクセスする必要がありました。WinRTではそれができないと言われたので、Florian-Glのプロキシを使用しました(ここから)。

問題は、次のようにページのリソースにそのプロキシを作成する必要があるということです。

<Page.Resources>
    <utils:ActualSizePropertyProxy Element="{Binding ElementName=noteBorder}" x:Name="proxy" />
</Page.Resources>

問題は、リソースからそのnoteBorder要素にアクセスできないことですが、ページ自体であるpageRootにはアクセスできます。

ElementName/Pathで遊んでnoteBorderにアクセスできると思います。

しかし、いくつかの奇妙なことがあります:

構造は次のようなものです。

Page (pageRoot) > Grid > ListView > ListView.ItemTemplate > Grid > Border (noteBorder)

したがって、境界線の同じレベルでプロキシを作成すると、プロキシは実行されませんが、ListViewをItemsControlに変更すると、期待どおりに実行され、機能します。

境界線の同じレベルにある場合は、ElementNamepageRootに変更すると、少なくとも実行されます。

したがって、ListViewを使用している場合は(アクセスできる場合でも)noteBorderを配置すると実行されませんが、ItemsControlで機能しますが、pageRootがある場合はすべての方法で機能します。

したがって、問題は次のとおりです。リソースからnoteBorderにアクセスする方法はありますか?または、別の場所からアクセスする方法かもしれませんが、機能しています:P

4

1 に答える 1

0

アイテム テンプレートを使用する必要があります -- pageRoot に到達するまでに) > Grid > ListView または Items Control

構造のこの時点で、実際に取得したい要素に到達しています。これは、アクセスしようとしている境界線が必要なアイテムのコンテナーです。

Item Template を定義し、バインディングを介して ListView (または ItemsControl) の ItemTemplate プロパティを割り当てる必要があります。

<ListView x:Name="myListView" DataContext="{Binding ToElementIfNotInheritedFromParent}" ItemsSource="{Binding ViewModelListBeingBoundTo}" ItemTemplate="{Binding Source={Static Resource MyCustomItemTemplate}}" />

MyCustomItemTemplate は次のようなものです

 <DataTemplate x:Name="MyCustomItemTemplate">
   <Border x:Name="myBorder" >
     <StackPanel>
       <TextBlock Text="{Binding Path=Title}" />
       <TextBlock Text="{Binding Path=FirstProperty}"/>
       <TextBlock Text="{Binding Path=SecondProperty}"/>
     </StackPanel>
   </Border>
 </DataTemplate>

次に、コードビハインドで(またはViewModelがコードビハインドを使用してListViewオブジェクトをViewModelに渡す場合)

DataTemplate dt = this.myListView.Items[indexOfChoice].ItemTemplate as DataTemplate;
Border b = dt.LoadContent() as Border;
int actualWidth = b.AcutalWidth 

OR

You can create a FindControl() method that runs recursively to extract the actual control within the border, for instance if you wanted to access one of the Textboxes. 

そのコードはここにあります: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a612f5a6-e05e-4b68-a813-893eeda159cc

于 2012-11-21T13:32:15.723 に答える