2013-08-22 3 views
0

Хотя я не прошу ввести код на этом, я хочу сделать панель, которая позволяет мне установить свойство Weight в дочерний элемент свойства. Идея состоит в том, что я хочу, чтобы StackPanel с горизонтальным выравниванием, что каждый дочерний элемент имеет вес. Я хочу захватить мои панели желаемой ширины (ширины экрана), а затем дать каждому ребенку ширину, которая им нужна. так, например,Как сделать взвешенную панель

сказать, что у меня есть эта WeightPanel, в которой есть 14 кнопок. Моя ширина экрана 480. Кнопка 1 имеет вес 2 кнопки 2 имеет вес 1 ... Кнопка 13 имеет вес 1 Кнопка 14 имеет вес 1,5

Если каждая кнопка имела вес 1, тогда все они получат 34,2 для ширины. Но в этом случае у меня есть кнопка с весом 2, а другая с весом 1,5. Таким образом, кнопка 1 теперь получит ширину 68,4, а кнопка 14 будет иметь ширину 51,4. Поэтому я бы пересчитал, что 1 должен быть 480 - (68,4 + 51,4) = 360,2/12 = 30.

Так что кнопки с 2 по 13 будут иметь ширину 30, а остальные 2 уже будут иметь ширину. У меня есть основа для создания настраиваемой панели. Единственный бит кода, который мне нужен, так что я могу пойти что-то вроде этого

<k:WeightedPanel> 
     <Button k:WeightedPanel.Weight="2" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1" Content="A" /> 
     <Button k:WeightedPanel.Weight="1.5" Content="A" /> 
    </k:WeightedPanel> 

все математики и макета вещи я разберусь. Я нашел один пример в CodePlex, когда человек смог создать свойство зависимостей, но я не знал бы, как его получить. например

 List<double> weights = new List<double>(); 
     foreach (UIElement child in this.Children) 
     { 
      weights.Add(child.Weight); 
     } 

Может ли кто-нибудь угодить мне в правильном направлении?

ответ

1

нет child.Weight, потому что это Attached Property.

Синтаксис должен быть:

var weight = WeightedPanel.GetWeight(child); 

Хотя, это действительно звучит как Grid мне.

Вы можете добиться того, что вы просите здесь с простой ванили Grid

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1.5*"/> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
    </Grid.ColumnDefinitions> 
</Grid> 
+0

Большое спасибо за указание мне вложенное свойство я понятия не имел, что она была вызвана. Я хочу что-то немного более чистое, чем сетка, о которой вы говорите, потому что я * стараюсь * сделать OSK –

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