我正在使用DataTemplateSelector选择不同的UserControls(引用http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector),根据所选路径选择所需的UserControl。
现在的问题是,当使用WebBrowser控件时,我应该将它绑定到MyScrollViewer的ActualHight,但是在其他所有它上面它与Hight一起工作,否则滚动条显示不好。必须来自WebBrowser控件。
如何根据加载的UserControl在Hight / ActualHight之间切换ContentControl中的Bindings?
<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>
答案 0 :(得分:1)
DataTemplateSelector
本身不会影响ContentControl
的其他属性,但是,您可以使用Converter
根据用于确定哪个属性的相同逻辑来确定宽度\高度要使用的模板。所以像这样:
<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
可以确定是获得ActualWidth / ActualHeight还是{{1的宽度/高度传入的内容。