1

実行時に WPF コントロールを追加する例をいくつか見てきまし たが、このソリューションは多くの人にとって機能しているようです。私は一体何を間違っているのですか?ラベルがキャンバスに表示されません。

Label l = new Label();
l.Background = new LinearGradientBrush(Colors.Black, Colors.Black, 0);
canBackArea.Children.Add(l);
l.Visibility = System.Windows.Visibility.Visible;
l.Content = "Hello";
Canvas.SetLeft(l,20); 
Canvas.SetTop(l, 20);
Canvas.SetZIndex(l, lableList.Count);

キャンバスには白い色があり、したがって背景です。canBackArea はキャンバスです

XML コード

    <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Visible">
        <Canvas Name="canBackArea"
                Width="500"
                Height="300"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Background="White"
                MouseMove="canBackArea_MouseMove">
            <telerik:RadContextMenu.ContextMenu>
                <telerik:RadContextMenu Name="mnuBack"
                                        ItemClick="ContextMenu_ItemClick"
                                        Opened="mnuBack_Opened">
                    <telerik:RadMenuItem Name="mBackground" Header="Set Background Image" />
                    <telerik:RadMenuItem Name="mSize" Header="Set Size" />
                    <telerik:RadMenuItem Name="mLable" Header="Add Text" />
                    <telerik:RadMenuItem Name="mChangeText" Header="Change Text" />
                </telerik:RadContextMenu>
            </telerik:RadContextMenu.ContextMenu>
            <Image Name="imgBackground" />
        </Canvas>
    </ScrollViewer>

たくさんのラベルを追加した後。

4

4 に答える 4

1

これは私の MainWindow.xaml です

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="canBackArea">

</Canvas>

これが私のコードビハインドです。

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Label l = new Label();

        canBackArea.Children.Add(l);
        l.Visibility = System.Windows.Visibility.Visible;
        l.Content = "Hello";
        Canvas.SetLeft(l, 20);
        Canvas.SetTop(l, 20);
    }

これは完全に正常に機能します。

http://i.imgur.com/JooqS.png

それはあなたがそれを使用している文脈に依存する可能性がありますか?

于 2012-09-05T13:05:16.640 に答える
0

問題は、私がスタイルを使用していて、ラベルを書きすぎていることでした。それをテキストボックスに置き換えたところ、すべて問題ないようです....

于 2012-09-06T10:33:24.120 に答える
0

あなたのxamlとこれを使用して

private void mnuBack_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e)
    {
        Label l = new Label();

        canBackArea.Children.Add(l);
        l.Visibility = System.Windows.Visibility.Visible;
        l.Content = "Hello";
        Canvas.SetLeft(l, 20);
        Canvas.SetTop(l, 20);
        Canvas.SetZIndex(l, lableList.Count);
        lableList.Add(l);
    }

ラベルを追加できます

于 2012-09-05T13:25:49.633 に答える
0

私はあなたの問題を再現しようとしましたが、考えられる問題は

  • ラベル コントロールに前景色が設定されていません。
  • zIndex は、私が Canvas.SetZIndex(l, canBackArea.Children.Count); と考える他のどの子コントロールよりも多くする必要があります。

以下は、私が試してテストしたものです。

XAML コード

<Window x:Class="TestApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="269*" />
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <Label Content="New Label Content" Height="30" />
            <TextBox x:Name="txtLabelContent" Width="200" Height="30"></TextBox>
            <Button Margin="10 0 0 0" Height="30" Width="70" Click="Button_Click">Add Label</Button>
        </StackPanel>
        <Canvas Grid.Row="1" x:Name="canBackArea" Background="White" Grid.RowSpan="2">
        </Canvas>
    </Grid>
</Window>

ウィンドウの分離コード

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace TestApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Label l = new Label();
            l.Background = new LinearGradientBrush(Colors.Black, Colors.Black, 0);
            l.Foreground = new LinearGradientBrush(Colors.White, Colors.White, 0);
            canBackArea.Children.Add(l);
            l.Visibility = System.Windows.Visibility.Visible;
            l.Content = txtLabelContent.Text;
            Canvas.SetLeft(l, 20);
            Canvas.SetTop(l, 20);
            Canvas.SetZIndex(l, canBackArea.Children.Count);
        }
    }
}
于 2012-09-05T13:19:05.303 に答える