繁体   English   中英

Windows Phone 8.1 ListView元素在绑定后执行代码

[英]Windows Phone 8.1 ListView element execute code after bind

我在绑定到集合的XAML接口中定义了一个ListView。

列表视图的DataTemplate具有WebView。 我需要此WebView调整其内容大小,这意味着在绑定ListView,创建元素并绑定这些元素之后,我需要在每个WebView上执行一段代码。

我已经做好了绑定WebView的工作,并且已经有了可以调整WebView大小的代码。 我只需要知道如何执行它即可。 放在哪里; 如何获取WebView以及何时尝试获取WebView。

编辑:

这是我的列表视图。

        <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>

解决方案是所谓的“行为”。

我们在代码片段中看到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:

<ListView.ItemTemplate>
    <DataTemplate>
        …
        <WebView …>
            <interactivity:Interaction.Behaviors>
                <local:WebViewSizeBehavior />
            </interactivity:Interaction.Behaviors>
        </WebView>
    </DataTemplate>
</ListView.ItemTemplate>

我遗漏了超出该线程范围之外的内容。 有关使WebView适应其内容以及名称空间和XML名称空间的信息,可在其他位置获得。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM