SurfaceアプリケーションでExpanderコントロールを使用しようとしています。サーフェスコントロールではないので、アプリケーションがコンパイルされてコントロールが表示されますが、連絡先が機能していません。
とにかく、連絡先イベントを変更して、サーフェスアプリケーションで機能させることができますか?
SurfaceアプリケーションでExpanderコントロールを使用しようとしています。サーフェスコントロールではないので、アプリケーションがコンパイルされてコントロールが表示されますが、連絡先が機能していません。
とにかく、連絡先イベントを変更して、サーフェスアプリケーションで機能させることができますか?
Expander
これを行うには、通常のコントロールの代わりにサーフェスコントロールを使用するようにテンプレートを変更するだけです。
のExpander
デフォルトテンプレートは、http://msdn.microsoft.com/en-us/library/ms753296.aspxにあります。
変更する必要があるのはToggleButtonだけです。
<ToggleButton OverridesDefaultStyle="True"
Template="{StaticResource ExpanderToggleButton}"
IsChecked="{Binding IsExpanded, Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}">
に変更
<s:SurfaceToggleButton OverridesDefaultStyle="True"
Template="{StaticResource ExpanderToggleButton}"
IsChecked="{Binding IsExpanded, Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}">
(終了タグは省略)
これはs
、SurfaceXML名前空間にバインドされていることを前提としています。
xmlns:s="http://schemas.microsoft.com/surface/2008"
私はそのような古いトピックをネクロするのは嫌いですが、これはグーグルのトップの結果であり、私にとってよりうまくいく解決策を見つけました。
GUIがロードされた後、VisualTreeHelperを再帰的に使用してList<DependencyObject>
、実行時にすべてのGUIオブジェクトを生成します。私のプロジェクトでは、他の理由でこのGUIオブジェクトリストが必要でしたが、非サーフェスコントロールのタッチサポートを追加するための非常に簡単なソリューションも提供しました。
viewObjectList.ForEach(x =>
{
var temp = x as System.Windows.Controls.Primitives.ToggleButton;
if (temp != null)
{
temp.IsManipulationEnabled = true;
temp.TouchUp += TouchUpEvent;
}
});
GUIオブジェクトのリストを繰り返し処理し、ToggleButtons(Expanderの実際のクリック可能な部分)を見つけ、タッチサポートをオンにして、TouchUpが起動されたとき(ユーザーが指を離したとき)にイベントをオブジェクトにバインドします。
private void TouchUpEvent(object sender, TouchEventArgs e)
{
if (TouchesOver.Count() == 1)
{
var temp = sender as System.Windows.Controls.Primitives.ToggleButton;
temp.IsChecked = !temp.IsChecked;
}
e.Handled = false;
}