2017-10-02 8 views
0

色を選択するためのポップアップウィンドウを作成しようとしています。ポップアップは、チューザーボタンを押したときに開き、色が選択されたとき、またはユーザーがその領域の外側をクリックしたときに閉じるようになっています。これは、ポップアップが初めて開くときに機能します。しかし、初めてポップアップを開くと、再び開くことはありません。概要WPFポップアップが初回起動後に開かない

選択]ボタンクラス選択ボタンの

public class RCTPaletteChooserButton : Button { 

    public Popup popup { get { return GetTemplateChild("popup") as Popup; } } 
    public RCTPaletteChooser chooser { get { return GetTemplateChild("chooser") as RCTPaletteChooser; } } 

    static RCTPaletteChooserButton() { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(RCTPaletteChooserButton), 
        new FrameworkPropertyMetadata(typeof(RCTPaletteChooserButton))); 

    } 

    public override void OnApplyTemplate() { 
     chooser.PaletteSelected += OnPaletteSelected; 
     base.OnApplyTemplate(); 
    } 

    private void OnPaletteSelected(object sender, PaletteEventArgs e) { 
     popup.IsOpen = false; 
     RemapColor = e.RemapColor; 
     RaiseEvent(new PaletteEventArgs(PaletteSelectedEvent, e.RemapColor)); 
    } 

    // None of these 3 overrides work 
    protected override void OnMouseDown(MouseButtonEventArgs e) { 
     RCTControls.PlayClick(); 
     popup.IsOpen = true; 
     base.OnMouseDown(e); 
    } 
    protected override void OnMouseUp(MouseButtonEventArgs e) { 
     popup.IsOpen = true; 
     base.OnMouseUp(e); 
    } 
    protected override void OnLostMouseCapture(MouseEventArgs e) { 
     popup.IsOpen = true; 
     base.OnLostMouseCapture(e); 
    } 
} 

コンテンツテンプレート。

<Style TargetType="{x:Type local:RCTPaletteChooserButton}"> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
    <Setter Property="Width" Value="12"/> 
    <Setter Property="Height" Value="12"/> 
    <Setter Property="IsTabStop" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:RCTPaletteChooserButton}"> 
       <Grid> 
        <Image x:Name="image" Width="12" Height="12"/> 
        <Popup x:Name="popup" PlacementTarget="{Binding ElementName=image}" 
         Placement="Bottom" AllowsTransparency="True" StaysOpen="False"> 
         <local:RCTPaletteChooser x:Name="chooser" Focusable="False"/> 
        </Popup> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

0

チューザボタンクラスで次の機能を変更して問題を解決しました。

protected override void OnMouseDown(MouseButtonEventArgs e) { 
    popup.StaysOpen = true; 
    popup.IsOpen = true; 
    base.OnMouseDown(e); 
} 
protected override void OnMouseEnter(MouseEventArgs e) { 
    popup.StaysOpen = false; 
    base.OnMouseEnter(e); 
} 
protected override void OnMouseLeave(MouseEventArgs e) { 
    popup.StaysOpen = false; 
    base.OnMouseEnter(e); 
} 
protected override void OnLostMouseCapture(MouseEventArgs e) { 
    // Function no longer needed 
    base.OnLostMouseCapture(e); 
} 
関連する問題