0

DataTemplateSelector を使用してさまざまな UserControls を選択しています ( http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselectorを参照)。選択したパスに従って、必要な UserControl を選択します。

問題は、WebBrowser コントロールを使用する場合、MyScrollViewer の ActualHight にバインドする必要がありますが、他のすべてのコントロールでは Hight で動作するか、スクロール バーが正しく表示されないことです。WebBrowser コントロールから取得する必要があります。

ロードされた UserControl に応じて、ContentControl のバインディングを Hight/ActualHight の間で切り替えるにはどうすればよいですか?

<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