我有一个包含每个州热点的地图(在Expression Blend中完成)。我捕获状态的每个MouseEnter(1到50)。我把它传递到我的域数据源:
Dim activebox As Path = TryCast(sender, Path)
activebox.Fill = mouseOverColor
Dim StateID As Integer = CInt(Right(activebox.Name, 2))
Dim _StateContext As New StateContext
myDataGrid.ItemsSource = _StateContext.States
_StateContext.Load(_StateContext.GetStateByStateIDQuery(StateID.Text))
以上适用于数据网格,列表框甚至数据表单。
但是我创建了一个带有文本块的stackpanel的弹出窗口。
popupStatesBox.DataContext = ??????????????
popupStatesBox.IsOpen = True 'popup does open but has no data
- popupStatesBox.xaml
<Popup x:Name="popupStatsBox" Margin="8,35,0,8" DataContext="{Binding}" IsOpen="false" Width="268" HorizontalAlignment="Left"> <StackPanel x:Name="Layout" Background="Black"> <TextBlock x:Name="tbState" Text="{Binding StateName /> <TextBlock x:Name="tbAbbrev" Text="{Binding Abbreviation}" /> </StackPanel> </Popup>
如何让文本块显示_StateContext中的值 StackPanel有DataContext但没有ItemsSource。我错过了什么?
答案 0 :(得分:0)
假设您已经在上下文中加载了States集合,那么这可能就是您所追求的: -
popupStatsBox.DataContext = _StateContext.States.FirstOrDefault(Function(s) s.StateID = StateID)
请注意,将数据编码到元素名称中并不是一个好习惯,请查看创建附加属性并将状态ID存储为每个Path的附加属性。
说实话,我很想创建一个从Selector
派生的自定义控件来创建一个StatesSelector控件。
您可以将ItemsSource属性绑定到States集合。随着鼠标的移动
关于将适当的项目从ItemsSource分配给SelectedItem
属性。
然而,这可能会让事情变得有点太过分了。