2

SurfaceアプリケーションでExpanderコントロールを使用しようとしています。サーフェスコントロールではないので、アプリケーションがコンパイルされてコントロールが表示されますが、連絡先が機能していません。

とにかく、連絡先イベントを変更して、サーフェスアプリケーションで機能させることができますか?

4

2 に答える 2

3

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"
于 2010-10-31T10:05:41.470 に答える
0

私はそのような古いトピックをネクロするのは嫌いですが、これはグーグルのトップの結果であり、私にとってよりうまくいく解決策を見つけました。

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;
    }
于 2015-04-21T04:37:18.787 に答える