1

我有每个州的热点地图(在 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))

以上适用于数据网格、列表框甚至数据表单。

但是我创建了一个带有文本块的堆栈面板的弹出窗口。

    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。我错过了什么?

4

1 回答 1

0

假设您已经在上下文中加载了 States 集合,那么这可能就是您所追求的那种事情:-

 popupStatsBox.DataContext = _StateContext.States.FirstOrDefault(Function(s) s.StateID = StateID)

请注意,将数据编码为元素名称不是一个好习惯,请查看创建附加属性并将状态 ID 存储为每个路径的附加属性。

老实说,我很想创建一个从 a 派生的自定义控件Selector来创建 StatesSelector 控件。

您将 ItemsSource 属性绑定到您的 States 集合。当鼠标移动时,将 ItemsSource 中的适当项目分配给SelectedItem属性。

然而,这可能有点太过分了。

于 2009-12-11T22:11:52.143 回答