XAML-код в C # - PullRequest
       23

XAML-код в C #

2 голосов
/ 01 ноября 2010

Я пытался преобразовать следующий код XAML в C #, но безуспешно. Я как бы застрял в части ControlTemplate. Я очень новичок в WPF, так что, возможно, я все делаю неправильно.

Идея заключается в том, что мне нужно извлечь данные из базы данных и обернуть каждую запись приведенным ниже шаблоном. Поскольку количество строк может различаться, я хочу создать каждый шаблон с использованием кода C #.

Я специально еще не определил все атрибуты элемента управления.

             <Grid>
                <Button Content="Button" Height="30" Name="button1" Margin="8,8,7,8" Click="button1_Click" >
                    <Button.Template>
                        <ControlTemplate>
                            <Rectangle RadiusX="5" RadiusY="5" Stroke="LightYellow" StrokeThickness="0.5" Name="myRectangle">
                                <Rectangle.Fill>
                                    <VisualBrush Opacity="0.7">
                                        <VisualBrush.Visual>
                                            <TextBlock Name="myTextBlock" Foreground="LightYellow" Background="DarkBlue" Text="Text here"  />
                                        </VisualBrush.Visual>
                                    </VisualBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
            </Grid>

Мой код C # на данный момент:

Grid grid = new Grid();
        Button button = new Button();
        ControlTemplate controlTemplate = new ControlTemplate();
        Rectangle rectangle = new Rectangle();
        VisualBrush visualBrush = new VisualBrush();
        TextBlock textBlock = new TextBlock();
        textBlock.Text = "Text here";
        textBlock.Background = new SolidColorBrush(Color.FromRgb(2, 33, 233));

        visualBrush.Visual = textBlock;
        visualBrush.Opacity = 0.7;
        rectangle.Fill = visualBrush;

        controlTemplate //What to do here?

        button.Template = controlTemplate;
        button.Content = "Button";
        button.Height = 30;
        button.Width = 100;
        grid.Children.Add(button);
        this.Content = grid;

Заранее спасибо,

Грант

1 Ответ

2 голосов
/ 01 ноября 2010

Этот код позади должен быть эквивалентен вашему xaml.
При "преобразовании" из Xaml в код позади, его практически легче вывернуть наизнанку, начиная с TextBlock в этом случае, а затем поднимаясь.

TextBlock textBlock = new TextBlock();
textBlock.Name = "myTextBlock";
textBlock.Foreground = Brushes.LightYellow;
textBlock.Background = Brushes.DarkBlue;
textBlock.Text = "Text here";

VisualBrush visualBrush = new VisualBrush();
visualBrush.Opacity = 0.7;
visualBrush.Visual = textBlock;

FrameworkElementFactory rectangle = new FrameworkElementFactory(typeof(Rectangle));
rectangle.SetValue(Rectangle.RadiusXProperty, 5.0);
rectangle.SetValue(Rectangle.RadiusYProperty, 5.0);
rectangle.SetValue(Rectangle.StrokeProperty, Brushes.LightYellow);
rectangle.SetValue(Rectangle.StrokeThicknessProperty, 0.5);
rectangle.SetValue(Rectangle.NameProperty, "myRectangle");
rectangle.SetValue(Rectangle.FillProperty, visualBrush);

ControlTemplate controlTemplate = new ControlTemplate();
controlTemplate.VisualTree = rectangle;

Button button = new Button();
button.Content = "Button";
button.Height = 30;
button.Name = "button1";
button.Margin = new Thickness(8, 8, 7, 8);
button.Click += new RoutedEventHandler(button_Click);
button.Template = controlTemplate;

Grid grid = new Grid();
grid.Children.Add(button);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...