1

各州のホットスポットを含むマップがあります (Expression Blend で作成)。状態 (1 ~ 50) の各 MouseEnter をキャプチャします。それをドメイン データ ソースに渡します。

    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 を各パスの添付プロパティとして保存してください。

正直に言うとSelector、StatesSelector コントロールを作成するために から派生したカスタム コントロールを作成したくなるでしょう。

ItemsSource プロパティを States コレクションにバインドします。マウスの動きに合わせて、適切な項目を ItemsSource からSelectedItemプロパティに割り当てます。

ただし、それは少し行き過ぎかもしれません。

于 2009-12-11T22:11:52.143 に答える