2


1

私はリストボックスを持っていて、それはアイテムテンプレートの一部としてチェックボックスを持っています。

チェックボックスをクリックしても、同じリストアイテムが選択されていることを確認します。

ListBoxItem lbi =((ListBoxItem)listLayers。 ContainerFromElement((CheckBox)sender)); lbi.IsSelected = true;

私が抱えている主な問題は、 "ContainerFromElement"がsilverlightでは利用できないということです。

任意の助けは大歓迎です。

編集

これは私が私のリスト内のチェックボックスのクリックイベントで実行しているコードです:

MyObjectとしてのMyObject obj = listLayers.SelectedItem。 obj.Visible = true; obj.Value = "50";

このコードと共にチェックボックスのRelativeSourceバインディングを使用すると、objがnullになります。

チェックボックスでオン/オフしたいレイヤのリストがあります。別の方法で開いています…​

4 Answer


5


selectionChangedイベントでは、チェックボックスを見つけるためにビジュアルツリーを「歩く」必要があります。 これを行うには VisualTreeHelperを使用します。

http://www.enterpriseetc.com/post/VisualTreeHelper-Class-in-Silverlight.aspx[この例]チェックボックスを表示するために必要な作業を示します。

以下はこの問題に対する他の解決策です。

ListboxItemとCheckBoxの間にRelativeSourceバインディングを使用する必要があります。 データ項目にはチェックボックスが含まれています。 このように変更してください。


これにより、ListBoxの_IsSelected_プロパティとCheckBoxの_IsChecked_プロパティの間にバインディングが作成されます。 このチュートリアルでは、例を用いてその方法を説明しています。

もっとコントロールが必要な場合は、http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx [Behaviors and triggers]をご覧ください。 彼らはもう少し複雑ですがあなたにもっとコントロールを与えます。


0


トラブルを避けてチェックボックスを作成し、それらをコードビハインドのStackPanelに追加してからそれらを繰り返して、 `IsChecked.Value = True`を持つものを探してください。 私に2分かかりました。

foreach(MyList内のオブジェクトオブジェクト){CheckBox cb1 = new CheckBox(){Content = object.MyProperty}; MyStackPanel.Children.Add(cb1); }


0


また、コードビハインドにコレクション、オブザーバブルコレクション、またはハッシュセットを設定し、チェックボックスをオンまたはオフにするメソッドを設定して、選択したオブジェクトを自分で追加または削除できるようにすることもできます。 ……

これが私がしたことです。

まずCheckBoxのタグを取得するために必要な要素をバインドしました


それから背後のコードで私はチェックされているかチェックされていないときはいつでも私はIDを得ました。

System.Collections.ObjectModelを使用します。 private ObservableCollection SelectedLocations = new ObservableCollection(); private void CheckBox_Checked(オブジェクト送信者、RoutedEventArgs e){Guid _guid = new Guid(((((CheckBox)送信者).Tag).Tag).ToString()); if(!SelectedLocations.Contains(_guid)){SelectedLocations.Add(_guid); }}

private void CheckBox_Unchecked(object sender、RoutedEventArgs e){Guid _guid = new Guid(((((CheckBox)sender).Tag).Tag).ToString());

if(SelectedLocations.Contains(_guid)){SelectedLocations.Remove(_guid); }

}

見て、それであなたが終わったとき、あなたはすでにコードの中にチェックされたもののリストを持っています…​


0


私にとって - このコードは目的を解決します。