2016-05-11 9 views
0

コレクションにバインドされたXAMLインターフェイスにListViewが定義されています。Windows Phone 8.1 ListView要素はバインド後にコードを実行します

リストビューのDataTemplateにはWebViewがあります。このWebViewがコンテンツのサイズに合わせる必要があります。つまり、ListViewがバインドされ、要素が作成され、それらの要素がバインドされた後、各WebViewでコードの断片を実行する必要があります。

私はすでにWebViewをバインドすることに気を配り、WebViewのサイズを決めるコードを持っています。私は単にそれを実行する方法を知る必要があります。どこに置くか。 WebViewsの入手方法と入手時期

編集:

ここは私のリストです。

 <ListView Opacity="{Binding IsRefreshing, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource BooleanToGhost}}" Grid.Row="0" Name="listView" ItemsSource="{Binding Messages}" IsItemClickEnabled="False" SelectionMode="Single"> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
       </Style> 
      </ListView.ItemContainerStyle> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="8"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*" /> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions> 
         <Rectangle Grid.ColumnSpan="2" Grid.RowSpan="2" Fill="White" RadiusX="12" RadiusY="12" /> 
         <TextBlock Foreground="#FFAAAAAA" Grid.Row="0" Grid.Column="0" Margin="8" Text="You" HorizontalAlignment="Left" FontSize="11" Visibility="{Binding IsFromStaff, Mode=OneTime,Converter={StaticResource BooleanToInvisibility}}" /> 
         <TextBlock Foreground="#FFAAAAAA" Grid.Row="0" Grid.Column="0" Margin="8" Text="Staff" HorizontalAlignment="Left" FontSize="11" Visibility="{Binding IsFromStaff, Mode=OneTime,Converter={StaticResource BooleanToVisibility}}" /> 
         <TextBlock Foreground="#FFAAAAAA" Grid.Row="0" Grid.Column="1" Margin="8" Text="{Binding Timestamp, Mode=OneTime}" HorizontalAlignment="Right" FontSize="11" /> 
         <WebView local:MyProperties.HtmlString="{Binding Body}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="8" ScrollViewer.VerticalScrollBarVisibility="Disabled" /> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <interactivity:Interaction.Behaviors> 
       <core:EventTriggerBehavior EventName="SelectionChanged"> 
        <core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=listView, Path=SelectedItem}" /> 
       </core:EventTriggerBehavior> 
      </interactivity:Interaction.Behaviors> 
     </ListView> 
+0

コードスニペルを追加できますか – SeeuD1

+0

私は私のリストビューのコードを追加しました。子としてWebViewを持つDataTemplateがあります。 WebViewが生まれてから、各WebViewを操作するコードを実行したい。密閉されたクラスなのでWebViewを拡張できません。表示する他の関連するコードはありません。問題のコードを追加する方法を知る必要があります。 –

答えて

1

「解決策」は、「動作」と呼ばれるものです。

DataTemplateにはWebViewが含まれていることがコードスニペットに示されています。これは影響を受けるアイテムです。そこで、WebViewにBehaviorを追加します。これはコード付きのクラスです。クラスは、そのようになっています

public class WebViewSizeBehavior : DependencyObject, IBehavior 
{ 
    public DependencyObject AssociatedObject { get; private set; } 

    public void Attach(DependencyObject associatedObject) 
    { 
     var control = associatedObject as WebView; 
     if (control == null) 
      throw new ArgumentException(
       "WebViewSizeBehavior can be attached only to WebView."); 
     AssociatedObject = associatedObject; 
     control.LoadCompleted += Control_LoadCompleted; 
    } 

    private void Control_LoadCompleted(object sender, Windows.UI.Xaml.Navigation.NavigationEventArgs e) 
    { 
     var control = (WebView) AssociatedObject; 

     var resizeTask = control.ResizeToContent(); 
    } 

    public void Detach() 
    { 
     var control = (WebView) AssociatedObject; 
     control.LoadCompleted -= Control_LoadCompleted; 
     AssociatedObject = null; 
    } 
} 

私の名前空間とXAMLは、このクラスが唯一local名前空間に到達可能であるように、アップ装備されています。これはどのようにこの答えの範囲を超えています。したがって、XAMLを次のように修正できます。

このスレッドの範囲を超えた内容は除外されています。 WebViewのコンテンツ、名前空間、XML名前空間の適合に関する情報は、他の場所でも入手できます。

関連する問題