2011-08-24 29 views
5

Metin kutusu ve tarih seçici gibi bazı kontrolleri bir araya getirecek bazı kontroller üzerinde bir araç ipucuna sahip olmak istediğim bir projem var. Fikir, sınırlı bir grafikle bir çeşit pop-up pencereye sahip olmaktı, ancak bazı kontroller birbirleriyle etkileşime giriyordu.WPF Araç ipucunu kontrollerle birlikte

Bir kontrole 'normal' bir araç ipucu eklemeyi biliyorum, ancak hareket ettiğinde, araç ipucunu reddederek etkileşimde bulunamıyorum.

Bu mümkün mü? Eğer öyleyse, nasıl ve değilse, buna alternatif var mı?

Teşekkür

cevap

10

Bunun yerine ToolTip

Örnek bir Popup kullanmalıdır. Fare TextBox üzerinde hareket eder ve sürece fare TextBox veya Popup

<TextBox Name="textBox" 
     Text="Popup On Mouse Over" 
     HorizontalAlignment="Left"/> 
<Popup PlacementTarget="{Binding ElementName=textBox}" 
     Placement="Bottom"> 
    <Popup.IsOpen> 
     <MultiBinding Mode="OneWay" Converter="{StaticResource BooleanOrConverter}"> 
      <Binding Mode="OneWay" ElementName="textBox" Path="IsMouseOver"/> 
      <Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" /> 
     </MultiBinding> 
    </Popup.IsOpen> 
    <StackPanel> 
     <TextBox Text="Some Text.."/> 
     <DatePicker/> 
    </StackPanel> 
</Popup> 

üzerinde olduğu gibi kalır açık mı bir BooleanOrConverter

public class BooleanOrConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     foreach (object booleanValue in values) 
     { 
      if (booleanValue is bool == false) 
      { 
       throw new ApplicationException("BooleanOrConverter only accepts boolean as datatype"); 
      } 
      if ((bool)booleanValue == true) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

Güncelleme
için kullandığında Popup açılır Bunu DataGrid'daki bir hücre için yap, birkaç seçeneğiniz var. Bunlardan ikisi, DataGridTemplateColumn için DataTemplates'un içine Popup eklemek veya DataGridCell Template'a ekleyebilirsiniz. İşte daha sonra bir örnek. Size bu bir DatagridRow yapılabilir mi DataGrid

<DataGrid SelectionMode="Single" 
      SelectionUnit="Cell" 
      ...> 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <Grid> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
           <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </Border> 
          <Popup PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
            Placement="Right" 
            IsOpen="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected}"> 
           <StackPanel> 
            <TextBox Text="Some Text.."/> 
            <DatePicker/> 
           </StackPanel> 
          </Popup> 
         </Grid>         
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style>  
    </DataGrid.CellStyle> 
    <!--...--> 
</DataGrid> 
+0

üzerinde = "Cell" SelectionMode = "Single" kurmak ve SelectionUnit gerektirecektir veya onun yerine bir TextBlock ile bir TemplateColumn kullanmalıyım? –

+0

Elbette, nasıl çalışmasını istersiniz? Popup ne zaman görünmeli? –

+0

Hücre seçildiğinde açılır pencereyi açmak istiyorum. Bu yapıldığında seçeneklerle küçük bir açılır pencere mevcut olacaktır. –

İlgili konular