バックグラウンド:
私のWindowsPhoneアプリケーション用に、CharacterPresenterというUserControlを作成しました(略してCPと呼びましょう)。これはBorderコントロール付きの小さな長方形で、PhoneAccentBrushとTransparentを切り替えて、ユーザーが選択されたときに表示できるようにします。
MultiCharacterPresenter(MCP)と呼ばれる2番目のUserControlを作成しました。これには、1行に複数のCPコントロールを表示するための水平方向のStackPanelが含まれています。これにも境界線コントロールがあるので、ユーザーは行全体が選択されていることを確認できます。
一度に選択できる*Presenterは1つだけで、すべてのBorderThickness="6"であることに注意してください。
要件:
私は12pxを持つことができません。各CP間のギャップ(透明な境界線によって引き起こされる)なので、境界線マージン= "-6、-6、-6、-6"を設定しました。これにより、境界線がCP UserControlの境界となる長方形の外側に配置され、CPコントロールがMCP内に1本の連続した線を形成できるようになります。
したがって、CPが選択されると、境界線は隣接するCPコントロールとオーバーラップします。選択したCPにはユーザーのフォーカスがあるため、他のCPコントロールが部分的に隠されている可能性があるため、これで問題ありません。
問題:
問題は、各CPの境界線の右側が、右側の次のCPの下にあることです。右端のCPのみが完全な境界線を示しています。CPが選択されたときに境界線全体を表示したいのですが、部分的に非表示になっています。
非解決策:
すべてのBorderコントロールのCanvas.ZIndexを1に設定しようとしました(他のすべてのコンテンツのデフォルトはゼロです)。これにより、Borderコントロールが他のすべての上に配置されます...しかし、それは機能しませんでした。理由はわかりません。
違いが生じる場合は、データに基づいて、コード内のMCPにCPコントロールを1つずつ追加しています。したがって、おそらくZIndexは、すべてのコントロールが同時にレンダリングされた場合にのみ機能します。たとえば、それらがXAMLに既に存在する場合(プログラムで追加されていない場合)です。
何か案は?