2016-07-04 4 views

答えて

0

は...子コンテンツは、 ポップアップコントロールが含まれているビジュアルツリーに追加されません。代わりに、IsOpenプロパティ がtrueに設定されている場合、子コンテンツは独自のビジュアルツリーを持つ別のウィンドウ にレンダリングされます。

ポップアップはそれ自身のウィンドウに生成されるので、フォーカスを失うことはありません(別のウィンドウのコントロールに)。代わりに、IsOpenプロパティがfalseに変更されたときに、Closedイベントに登録します。

+0

おかげで、私は解決し、私は自分の答えのような解決策を説明します – Ed1085

0

おかげファンク、私はトグルボタンで解決:

XAML:

<UserControl ..... 
      ..... 
      xmlns:local="clr-namespace:NameSpace.UserControl">  
       <UserControl.Resources> 
        <ControlTemplate x:Key="IconButton" TargetType="{x:Type ToggleButton}"> 
         <Border> 
          <ContentPresenter /> 
         </Border> 
        </ControlTemplate> 
        <local:BoolInverter x:Key="BoolInverterConverter"/> 
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
       </UserControl.Resources> 
       <ToggleButton Template="{StaticResource IconButton}" BorderBrush="Transparent" 
    Background="Transparent" Name="PopUpCalendarButton" IsChecked="False" 
IsHitTestVisible="{Binding ElementName=popUp, Path=IsOpen, Mode=OneWay, Converter={StaticResource BoolInverterConverter}}"> 
        ...... 
       </ToggleButton> 
       <Popup x:Name="popUp" IsOpen="{Binding Path=IsChecked, ElementName=PopUpCalendarButton}" PlacementTarget="{Binding ElementName=PopUpCalendarButton}" AllowsTransparency="True" PopupAnimation="Fade" StaysOpen="False"> 
        .....  
       </Popup> 
     </UserControl> 

C#

namespace NameSpace.UserControl 
{ 
    public partial class UserControlClass: UserControl 
    { 
    ........... 
    } 

    public class BoolInverter : MarkupExtension, IValueConverter 
    { 
     public override object ProvideValue(IServiceProvider serviceProvider) 
     { return this; } 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { return !(bool)value; } 
     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { return !(bool)value; } 
    } 
} 
関連する問題