2012-03-23 14 views
0

wpfのコードが動的に追加されている場合、それらにツールチップを追加したり、実際のボタンにテキストを追加したりできますか?動的に追加されたボタン(ヒントとテキスト)

これは、Windowsフォームで何をするのかですが、私はあなたがWPFでそれを行うことができると思ういけない:わからないテキストIMを追加するよう

partial class Window1 
{ 
    void button3Click(object sender, RoutedEventArgs e) 
    { 
     //toolTip1.SetToolTip(this.button1, "My button1"); 
     MessageBox.Show("action 3"); 
    } 
    void button2Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("action 2"); 
    } 
    void button1Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("action 1"); 
    } 

    public Window1() 
    { 
     this.InitializeComponent(); 
     populateButtons(); 
     //ToolTip toolTip1 = new ToolTip(); 

     //// Set up the delays for the ToolTip. 
     //toolTip1.AutoPopDelay = 5000; 
     //toolTip1.InitialDelay = 1000; 
     //toolTip1.ReshowDelay = 500; 
     //// Force the ToolTip text to be displayed whether or not the form is active. 
     //toolTip1.ShowAlways = true; 

    } 

    public void populateButtons() 
    { 
     int xPos; 
     int yPos; 


     Random ranNum = new Random(); 
     foreach (var routedEventHandler in new RoutedEventHandler[] { button1Click, button2Click, button3Click }) 
     { 

      Button foo = new Button(); 
      Style buttonStyle = Window.Resources["CurvedButton"] as Style; 
      int sizeValue = 100; 

      foo.Width = sizeValue; 
      foo.Height = sizeValue; 

      xPos = ranNum.Next(200); 
      yPos = ranNum.Next(250); 

      //canvas1.HorizontalAlignment = HorizontalAlignment.Left; 
      //canvas1.VerticalAlignment = VerticalAlignment.Top; 
      //canvas1.Margin = new Thickness(xPos, yPos, 0, 0); 

      foo.HorizontalAlignment = HorizontalAlignment.Left; 
      foo.VerticalAlignment = VerticalAlignment.Top; 
      foo.Margin = new Thickness(xPos, yPos, 0, 0); 
      foo.Style = buttonStyle; 

      foo.Click += routedEventHandler; 

      LayoutRoot.Children.Add(foo); 
     } 
    } 
} 

}

?ここで

はXAMLです:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xml:lang="en-US" 
    x:Class="DynamicButtons.Window1" 
    x:Name="Window" 
    Title="Dynamic Buttons" 
    Width="840" Height="600" Icon="shape_group.png"> 
    <Window.Resources> 
      <Style x:Key="CurvedButton" BasedOn="{x:Null}" TargetType="{x:Type Button}"> 

       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
          <ControlTemplate.Resources> 
           <Storyboard x:Key="OnMouseMove1"> 
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
             <SplineColorKeyFrame KeyTime="00:00:00" Value="#FFFFFFFF"/> 
             <SplineColorKeyFrame KeyTime="00:00:00.3000000" Value="#7CE1DBDB"/> 
            </ColorAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.66"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.66"/> 
            </DoubleAnimationUsingKeyFrames> 
           </Storyboard> 
           <Storyboard x:Key="OnMouseLeave1"> 
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.8000000" Value="1.78"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1"/> 
            </DoubleAnimationUsingKeyFrames> 
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"> 
             <SplineDoubleKeyFrame KeyTime="00:00:00.8000000" Value="1.78"/> 
             <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1"/> 
            </DoubleAnimationUsingKeyFrames> 
           </Storyboard> 
           <Storyboard x:Key="OnClick1"> 
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
             <SplineColorKeyFrame KeyTime="00:00:00.2000000" Value="#FFFFFFFF"/> 
             <SplineColorKeyFrame KeyTime="00:00:00.3000000" Value="#BFA0D1E2"/> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </ControlTemplate.Resources> 
          <Grid> 
           <Rectangle RenderTransformOrigin="1,1" Fill="#3FFFFFFF" Stroke="{x:Null}" RadiusX="11" RadiusY="11" x:Name="rectangle"> 
            <Rectangle.RenderTransform> 
             <TransformGroup> 
              <ScaleTransform ScaleX="1" ScaleY="1"/> 
              <SkewTransform AngleX="0" AngleY="0"/> 
              <RotateTransform Angle="0"/> 
              <TranslateTransform X="0" Y="0"/> 
             </TransformGroup> 
            </Rectangle.RenderTransform> 
           </Rectangle> 
           <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <EventTrigger RoutedEvent="ButtonBase.Click"> 
            <BeginStoryboard x:Name="OnClick1_BeginStoryboard" Storyboard="{StaticResource OnClick1}"/> 
           </EventTrigger> 
           <EventTrigger RoutedEvent="Mouse.MouseLeave"> 
            <BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/> 
           </EventTrigger> 
           <EventTrigger RoutedEvent="FrameworkElement.Loaded"/> 
           <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
            <BeginStoryboard x:Name="OnMouseMove1_BeginStoryboard" Storyboard="{StaticResource OnMouseMove1}"/> 
           </EventTrigger> 
           <Trigger Property="IsFocused" Value="True"/> 
           <Trigger Property="IsDefaulted" Value="True"/> 
           <Trigger Property="IsMouseOver" Value="True"/> 
           <Trigger Property="IsPressed" Value="True"/> 
           <Trigger Property="IsEnabled" Value="False"/> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 

       <Setter Property="Background"> 
        <Setter.Value> 
         <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
          <GradientStop Color="#FFF3F3F3" Offset="0"/> 
          <GradientStop Color="#FFEBEBEB" Offset="0.5"/> 
          <GradientStop Color="#FFDDDDDD" Offset="0.5"/> 
          <GradientStop Color="#E1CDCDCD" Offset="1"/> 
         </LinearGradientBrush> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Window.Resources> 
    <Window.Triggers> 
     <EventTrigger RoutedEvent="FrameworkElement.Loaded"/> 
    </Window.Triggers> 
    <Window.Background> 
     <LinearGradientBrush EndPoint="0.484,0.543" StartPoint="0.478,0.009"> 
      <GradientStop Color="Gray" Offset="1"/> 
      <GradientStop Color="DarkGray" Offset="0"/> 
     </LinearGradientBrush> 
    </Window.Background> 

     <Grid x:Name="LayoutRoot"> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Canvas Height="282" HorizontalAlignment="Left" Margin="12,12,0,0" Name="canvas1" VerticalAlignment="Top" Width="343" /> 
    </Grid> 

</Window> 

答えて

1

Tooltip - プロパティを使用しようとしましたか?

1

あなたはButtonToolTipプロパティにToolTipを割り当てると、表示したいテキストにContentプロパティを設定することができます。

ToolTip t = new ToolTip(); 
t.Content = "Something helpful"; 

Button b = new Button; 
b.Content = "Hover over me"; 
b.ToolTip = t; 

あなたの場合明らかにボタンを表示させたいのですが、それをパネルに追加する必要があります。それはキャンバスだと思います:

// add the button to the canvas 
canvas1.Children.Add(b); 
// set the position of the button on the canvas 
Canvas.SetLeft(b, 20); 
Canvas.SetTop(b, 20); 
+0

ボタンがあれば助けてくれますか?このメソッドを使って何も表示しません。 –

+0

'foo.Content ="私の上にカーソルを置いてください ";これは動作しますが、個別に設定するのではなく、個別に設定するのではなくて設定します。 –

+0

@KirstyWhite:ボタンをキャンバスに追加する方法を示すサンプルコードを追加しました。それが表示されます。正確には何を意味するのかはっきりしていません。必要なすべてのボタンを作成します(おそらくループ内にあります)。また、ボタンごとにContentプロパティを設定して、好きなテキストに合わせます。 – ChrisWue

関連する問題