0

我正在使用 DataTemplateSelector 选择不同的 UserControls(参考http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector),根据所选路径我选择所需的 UserControl。

现在的问题是,当使用 WebBrowser 控件时,我应该将它绑定到 MyScrollViewer 的 ActualHight,但在所有其他的情况下它都可以与 Hight 一起使用,否则滚动条显示不好。必须来自 WebBrowser 控件。

如何根据加载的 UserControl 在 Hight/ActualHight 之间切换 ContentControl 中的绑定?

<DataTemplate x:Key="WebTemplate1">
    <DockPanel LastChildFill="True">
        <controls:WebBrowserUserControl SourceHtml="{Binding Converter={StaticResource UriConverter1}}" />
    </DockPanel>
</DataTemplate>

<DataTemplate x:Key="ImgTemplate1">
    <Image Source="{Binding Converter={StaticResource RelativeToAbsolutePathConverter1}}"
           Stretch="None" />
</DataTemplate>

...

<ScrollViewer Name="MyScrollViewer"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch"
              DockPanel.Dock="Left"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto">
    <Grid x:Name="MyGridHelper">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
            <DockPanel x:Name="MyDockPanel" Dock="Top" HorizontalAlignment="Left">
                <ContentControl x:Name="MyContentControl"
                                Width="{Binding ElementName=MyScrollViewer,
                                                Path=Width/ActualWidth}"
                                Height="{Binding ElementName=MyScrollViewer,
                                                 Path=Height/ActualHight}"
                                Content="{Binding Path=CurrentItem1,
                                                  Mode=OneWay}"
                                ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
            </DockPanel>
    </Grid>
</ScrollViewer>
4

1 回答 1

1

DataTemplateSelector本身不能影响 的其他属性,ContentControl但是,您可以使用 aConverter来确定 Width\Height 基于用于确定要使用哪个模板的相同逻辑。所以是这样的:

<ContentControl x:Name="MyContentControl"
                Width="{Binding ElementName=MyScrollViewer, Converter={StaticResource MyWidthConverter}, ConverterParameter="???"}"
                Height="{Binding ElementName=MyScrollViewer, Converter={StaticResource MyHeightConverter}, ConverterParameter="???"}"
                Content="{Binding Path=CurrentItem1, Mode=OneWay}"
                ContentTemplateSelector="{StaticResource MyTemplateSelector}" />

我为 打上问号是ConverterParameter因为我不清楚您如何确定哪种情况需要哪种宽度/高度。但是您可以传入一个参数,该参数将允许您决定要传回哪个值,并根据该决定,Converter可以确定是获取ScrollViewer传入的 ActualWidth/ActualHeight 还是 Width/Height。

于 2013-04-23T12:59:25.633 回答