【发布时间】:2016-10-09 21:33:00
【问题描述】:
我正在构建一个继承 ItemsControl 并具有 ItemsPanelTemplate 的 StackPanel 的 CustomControl。 这是风格:
<Style TargetType="{x:Type MyCustomControl}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="{Binding Path=DockPanel.Dock, Converter={StaticResource PositionToOrientationConverter}}"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Grid >
<Border Background="Black" Height="0"/>
<ItemsPresenter/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是转换器类:
Public Class PositionToOrientation
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim position As Dock = value
Select Case position
Case Dock.Top
Return Orientation.Horizontal
Case Dock.Bottom
Return Orientation.Horizontal
Case Dock.Left
Return Orientation.Vertical
Case Dock.Right
Return Orientation.Vertical
End Select
Return Dock.Top
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
但它似乎忽略了方向属性。
编辑:我想要获得的功能是,当我将 MyCustomControl 放入 DockPanel 时,StackPanel 会根据对接进行定向(就像我在 Converter 中编码一样)。
【问题讨论】:
-
您当前正在绑定到数据项类的
DockPanel.Dock属性。这是你的意图吗?除此之外,“我无法正常工作”并不是一个很有帮助的错误描述。尝试为您的问题添加更多详细信息。 -
感谢您的评论。抱歉,这是我的第一个问题。我编辑了问题以明确我的意图。
-
调试输出中是否有任何错误/绑定消息?
-
没有错误或消息。我创建了一个程序,将 MyCustomControl 放在 DockPanel 中。但是,如果我为 MyCustomControl 设置 DockPanel.Dock=Top,其中的项目将垂直排列而不是水平排列。
标签: wpf binding wpf-controls