Nano Hash - криптовалюты, майнинг, программирование

Стиль окна и использование элементов управления (C# и WPF)

Я использую Visual Studio 2013 для создания своих приложений. Я начал изучать программирование 4 года назад, и теперь я хочу улучшить свой опыт программирования.

В последние дни мне пришлось создать простое приложение, но я не хотел использовать стиль окна по умолчанию. Итак, я прочитал, что могу создать стиль для своего окна. Я сделал это, все работает нормально, но есть небольшая проблема: теперь я не могу ничего поместить в свое окно... Все элементы управления, которые я поместил в сетку, в тег окна, не видны, но компилятор их не видит. не показывать никаких проблем.

Вот код стиля, затем мой Window XAML

<Style TargetType="Window" x:Key="DefaultWindow">
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="WindowStyle" Value="None"/>
        <Setter Property="ResizeMode" Value="CanResizeWithGrip"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">                       
                    <Border BorderThickness="1" BorderBrush="Black">
                        <Border BorderThickness="3" BorderBrush="#FF244E97">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="50"></RowDefinition>
                                    <RowDefinition></RowDefinition>
                                </Grid.RowDefinitions>

                                <Grid Grid.Row="0" Background="#FF244E97">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition></ColumnDefinition>
                                        <ColumnDefinition Width="Auto"></ColumnDefinition>
                                    </Grid.ColumnDefinitions>

                                    <Viewbox Grid.Column="0" Grid.Row="0" Stretch="Uniform" HorizontalAlignment="Left" Margin="10">
                                        <TextBlock FontFamily="Corbel" Background="#FF244E97" Foreground="White">Costo Unitario</TextBlock>
                                    </Viewbox>

                                    <Grid Grid.Column="1">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition></ColumnDefinition>
                                            <ColumnDefinition></ColumnDefinition>
                                            <ColumnDefinition></ColumnDefinition>
                                        </Grid.ColumnDefinitions>

                                        <Viewbox Grid.Column="0" Stretch="Uniform" HorizontalAlignment="Left" Margin="2, 10, 2, 10">
                                            <TextBlock FontFamily="Corbel" Background="#FF244E97" Foreground="White">_</TextBlock>
                                        </Viewbox>

                                        <Viewbox Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Left" Margin="2, 10, 2, 10">
                                            <TextBlock FontFamily="Corbel" Background="#FF244E97" Foreground="White">◘</TextBlock>
                                        </Viewbox>

                                        <Viewbox Grid.Column="2" Stretch="Uniform" HorizontalAlignment="Left" Margin="2, 10, 20, 10">
                                            <TextBlock FontFamily="Corbel" Background="#FF244E97" Foreground="White">X</TextBlock>
                                        </Viewbox>

                                    </Grid>

                                </Grid>

                                <Grid x:Name="ContenentGrid" Grid.Row="1" Background="White">
                                    <ResizeGrip Width="10" Height="10" Grid.Column="1" VerticalAlignment="Bottom"/>
                                </Grid>

                            </Grid>                                                             
                        </Border>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

И мой Windows Xaml:

<Window x:Class="Pabich.Marcin._5HI.CostoUnitario.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:chrt="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    Title="MainWindow" Height="600" Width="800" WindowStartupLocation="CenterScreen"
    Style="{StaticResource DefaultWindow}">

<Grid>
    <TextBlock>Hello!</TextBlock>
</Grid>

This should be a no-border window, within I can put controls, in the central grid. This is a screen of the window for now: Screen of the Window

Как видите, я оставил все свободное пространство для элементов управления, но их там нет. Итак, как я могу это сделать?

PS: Имейте в виду, что я только новичок, и я хочу использовать простой код

24.01.2014

  • Ваш шаблон устанавливает границу, и все, что вы указали в этом шаблоне, является частью границы, включая сетку с x:Name=ContentGrid. Я думаю, что ваша рамка может заполнять экран, а содержимое (привет!) находится под ней — и за пределами видимой области. Установите для фона ContentGrid красный цвет и посмотрите, как он выглядит. 24.01.2014

Ответы:


1

Я думаю, это происходит потому, что вы не используете ContentPresenter для отображения содержимого окна. Без ContentPresenter модель контента WPF не знает, где должен быть размещен контент, и не показывает его.

Попробуйте добавить ContentPresenter в свой ContentGrid (окно WPF также требует его в AdornerDecorator).

<Grid x:Name="ContenentGrid" Grid.Row="1" Background="White">
    <AdornerDecorator>
       <ContentPresenter Content="{TemplateBinding Content}" />
    </AdornerDecorator>
    ... ResizeGrip here ...
</Grid>
24.01.2014
  • Да, это работает. Это решение моей проблемы. Спасибо! 25.01.2014
  • Пожалуйста! Я рад, что мой ответ был полезен для вас. Пожалуйста, отметьте мой ответ как правильный, чтобы другие люди могли его увидеть. 25.01.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..