2009-12-16 3 views
0

ToggleButton이 작동하지 않습니다. 내가 이해하는대로 ToggleButton은 클릭 할 때 선택해야하고 다시 클릭하면 선택 취소됩니다.ToggleButton을 클릭 할 때 선택을 취소하지 않음

이 예제의 ToggleButton은 그렇지 않습니다. 그것을 클릭하면 다시 확인하도록 설정됩니다. 어떤 아이디어가 필요한가?

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <ToggleButton Width="100" Height="35" Name="btnAddLinkComment" >   
      <CheckBox Content=" Comment" FlowDirection="RightToLeft" IsHitTestVisible="False" 
         Focusable="False" IsChecked="{Binding ElementName=txtLinkComment, Path=Text}" 
         Name="chkHasComment" Margin="5"/> 
     </ToggleButton> 
     <Popup IsOpen="{Binding ElementName=btnAddLinkComment,Path=IsChecked}" 
       PlacementTarget="{Binding ElementName=btnAddLinkComment}" Name="popAddCommentLink" 
       AllowsTransparency="True" StaysOpen="False" PopupAnimation="Fade" HorizontalOffset="-50" 
       VerticalOffset="50"> 
      <Border BorderBrush="#FF000000" Background="LightBlue" BorderThickness="1,1,1,1" 
        CornerRadius="8,8,8,8" Padding="5"> 
       <Grid Background="LightBlue"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="80"></ColumnDefinition> 
         <ColumnDefinition Width="200"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <TextBlock TextWrapping="Wrap" Foreground="Black">Enter Link Comment:</TextBlock> 
        <TextBox Grid.Column="1" Name="txtLinkComment" Width="200"></TextBox> 
       </Grid> 
      </Border> 
     </Popup> 
    </Grid> 
</Page> 

답변

1

팝업이 btnAddLinkComment.isChecked 속성으로 구부러져 발생합니다. 무슨 일이 일어날 것인가하는 것은 팝업이 닫히고 단추의 IsChecked 필드를 false로 설정하여 단추를 흔들리지 않게 설정하면 단추를 클릭한다는 것입니다. 클릭이 버튼 자체에 의해 처리되고 토글되지 않기 때문에 토글되고 팝업이 다시 표시됩니다. 바인딩을 제거하고 코드에서 일부 처리를 수행하여 문제를 해결할 수 있다고 생각합니다. 이 같은 떨어지게 :이 도움이

btnAddLinkComment.Click += btnAddLinkComment_Click; 
popAddCommentLink.Closed += popAddCommentLink_Closed; 

private void btnAddLinkComment_Click(object sender, RoutedEventArgs e) 
{ 
    if (popAddCommentLink.IsOpen && btnAddLinkComment.IsChecked == false) 
     popAddCommentLink.IsOpen = false; 
    else if (!popAddCommentLink.IsOpen && btnAddLinkComment.IsChecked == true) 
     popAddCommentLink.IsOpen = true; 
} 

private void popAddCommentLink_Closed(object sender, EventArgs e) 
{ 
    btnAddLinkComment.IsChecked = false; 
} 

희망,

+0

1 도움. 나는 이것이 정확하게 대답이라고 생각한다. :) – Anvaka

+0

나는 뒤에 코드를 추가하지 않고 이것을하기를 바랬다. 나는 그것이 필요하다고 생각한다 – Vaccano

1

에 관해서는 당신이 수행하지만 아래 코드는 올바른 방향으로 단계가 될 수 원하는 것을 완전히 확실하지 않다. 정교하게하십시오!

<Window x:Class="ToggleButtonSpike.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
    xmlns:local="clr-namespace:ToggleButtonSpike"> 
    <Window.Resources> 
     <local:TextToBool x:Key="StringToBool"/> 
    </Window.Resources> 
    <StackPanel> 
     <ToggleButton Name="Toggle" > 
      <CheckBox IsHitTestVisible="False" 
       Content="{Binding ElementName=Comment, Path=Text, 
       UpdateSourceTrigger=PropertyChanged}" 
       IsChecked="{Binding ElementName=Comment, Path=Text, 
       Converter={StaticResource StringToBool}}"/> 
     </ToggleButton> 
     <Popup IsOpen="{Binding ElementName=Toggle, Path=IsChecked}" 
       PlacementTarget="{Binding ElementName=Toggle}"> 
      <StackPanel> 
       <TextBlock Foreground="White"> 
        Enter comment: 
       </TextBlock> 
       <TextBox Name="Comment"/> 
      </StackPanel> 
     </Popup> 
    </StackPanel> 
</Window> 

using System; 
using System.Windows; 
using System.Windows.Data; 


namespace ToggleButtonSpike 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 
    } 

    public class TextToBool : IValueConverter 
    { 
     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return !string.IsNullOrEmpty((string)value); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
} 
+0

토글 btn이 눌려 졌을 때 보여줄 팝업을 다시 클릭했을 때 사라지게하고 싶다. 코드를 사용하여 코드를 작성할 수는 있지만 바인딩을 사용하여 코드를 작성하려고했습니다. – Vaccano

+0

위의 코드는 그렇게합니다. 그것이하지 않으면 입력 버튼을 누르면 팝업이 닫힙니다. 그러나 마우스 클릭이 작동합니다. – Dabblernl

1

토글 버튼을 클릭하면 그것은 체크되거나 체크되지 않을 것입니다. 친절하게 기억하십시오. 처음 클릭하면 초점이 맞춰집니다. 시도하십시오 :

<ToggleButton Focusable="False"/> 

희망이 당신에게

관련 문제