2012-05-17 3 views
0

Добрый вечер. Я изучаю свою проблему уже около двух дней и пробовал хотя бы десяток вариантов проблемы. Каждый последний последний из них был полным полным сбоем, поэтому я не буду размещать здесь какой-либо код.Создание пользовательской стековой панели с прозрачной «Windows»

Что мне нужно, это StackPanel для окна без границ. У StackPanel должен быть непрозрачный фон, и дети должны иметь прозрачный фон. Мне нужна прозрачность, чтобы переносить ВСЕ путь через дочерний элемент, StackPanel и основное основное окно.

Есть ли у кого-нибудь идеи, как это сделать, и где я должен начать? Я программист на промежуточном уровне, и здесь я нашел сплошную стену. Я пытался унаследовать от Panel Class, перебегая обычных подозреваемых; MeasureOverride, ArangeOveride, OnRender и т. Д.

Одна из мыслей, которые у меня также были, использовала ту или иную форму CombinedGeometry между родительским и всеми дочерними узлами.

Спасибо заранее!

+1

Я не совсем понимаю, что вы имеете в виду, когда говорите: «StackPanel должен иметь ** непрозрачный ** фон». Разве вы не хотите иметь полную прозрачность через полное дерево элементов? Или, другими словами, если у вас есть TextBlock с некоторым текстом, вы видите этот текст и ничего больше поверх рабочего стола (и, конечно, других окон)? – Clemens

+0

Хорошо, вот сделка. Я создаю приложение для доски (по необходимости). У меня есть несколько элементов внутри панели стека. В верхней части находится меню. В нижней части находится палитра с элементами управления. В центре есть «белая доска». Белая доска должна обладать полной прозрачностью в базовом приложении, в первую очередь в формате PDF. Мне нужна область, окружающая доску, содержащую элементы управления, которые необходимо заполнить, а не прозрачно. Это имеет смысл? – Chellsie

+0

Я до сих пор не понимаю, где проблема. StackPanel или любая другая панель уже прозрачны, если вы явно не задали его свойство Background. Нет проблем. Вы также можете наложить эту панель поверх любого другого (средства просмотра PDF?). Нет проблем. Что это за элементы доски? Путь, например, также прозрачен, если только он не имеет замкнутой геометрии, и вы устанавливаете его свойство Fill. Все еще не проблема. – Clemens

ответ

0

Возможно, вам не хватает Window.AllowsTransparency="True". Грустно сказать, что вам нужно создать свой собственный заголовок окна и границу, потому что для свойства WindowStyle должно быть установлено значение None.

Я создал образец для вас:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     AllowsTransparency="True" 
     Background="Transparent" 
     WindowStyle="None" 
     WindowStartupLocation="CenterScreen"> 
    <Border BorderBrush="Black" BorderThickness="1">   
     <DockPanel> 
      <Menu DockPanel.Dock="Top"> 
       <MenuItem Header="Application"> 
        <MenuItem Header="_Close" Click="MenuItem_Click"/> 
       </MenuItem> 
      </Menu> 
      <ToolBar DockPanel.Dock="Bottom"> 
       <Button>sample button</Button> 
      </ToolBar> 
      <StackPanel> 
       ... your whiteboard ... 
      </StackPanel> 
     </DockPanel> 
    </Border> 
</Window> 

.

private void MenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    this.Close(); 
} 
+0

Итак, возможно, мне нужно получить немного «графику» с этим, прежде чем я сделаю из себя полный и полный идиот. Вот ссылка на изображение приложения в действии, которое я собрал вместе. (http://studiocc.elementfx.com). Мне нужна панель для ввода всего этого беспорядка, который будет иметь черный фон, при этом разрешая прозрачную доску. Если я установил стек, который имеет все прямо сейчас, основное приложение будет заблокировано. – Chellsie

+0

Я разместил еще один рисунок на своем сайте. (http://studiocc.elementfx.com) Последнее предложение не сработало. Я начинаю задумываться, возможно ли то, что мне нужно.Как вы можете видеть, я потерял прозрачность своей доски. У меня есть контейнер, заполненный сейчас, как я хотел, но без прозрачности. Любые другие идеи? Благодаря!! CC – Chellsie

+0

Как вы потеряли прозрачность? У вас есть несколько уровней (в моем примере окна, границе, док-панели, стека панели). Если один слой не прозрачен, вы не можете видеть, что ниже. – LPL

0

Итак, после того, как много, много, часов грубой силы «взлома» мне удалось выяснить способы сделать то, что мне нужно.

<Border Name="OuterBorder" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Orange" BorderThickness="1.5"> 
    <Border Name="FillerStrip" BorderBrush="Black" BorderThickness="20"> 
     <Border Name="InnerBorder" BorderBrush="Orange" BorderThickness="1.5"> 
      <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent"> 
       <local:GlassBoardControl BorderBrush="Orange"   BorderThickness="2" AxisBrush="LawnGreen" AxisThickness="15" x:Name="screen" /> 

      </StackPanel> 
     </Border>  
    </Border> 
</Border> 

Теперь вопрос только в том, как я могу создать пользовательскую панель с этой границей? Любые идеи относительно того, с чего я должен начать, будут высоко оценены.

Смежные вопросы