Estoy tratando de encontrar la mejor manera de ajustar algunos controles pero no puedo hacerlo bien. Tengo una ventana que se añade en un control personalizado:WPF - Adoptar el tamaño del padre
<Grid x:Name="LayoutRoot">
<my:RateGraph Grid.Column="0" x:Name="rateGraph1" Height="88" Width="380" />
</Grid>
continuación Deseo tamaño de los subcomponentes de este control se define en el XAML para llenar ya sea la altura, anchura o ambos. Sin embargo, lo que encuentro es que si quito el ancho/alto explícito y trato de usar algo como VerticalAlignment = "Stretch", entonces obtengo un control de tamaño 0 ... ¿Qué estoy haciendo mal?
<rb:RateBase x:Class="RateBar.RateGraph"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:rb="clr-namespace:RateBar"
xmlns:sd="clr-namespace:System.Windows.Data"
mc:Ignorable="d">
<RangeBase.Resources>
<rb:JScriptConverter x:Key="JScript" TrapExceptions="False"/>
<ControlTemplate x:Key="rateGraphTemplate" TargetType="{x:Type rb:RateBase}">
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<rb:Axis Width="320" Height="88"/>
<Rectangle Height="88" Fill="#9690EE90" x:Name="progress">
<Rectangle.Width>
<MultiBinding Converter="{StaticResource JScript}" ConverterParameter="values[0]/values[1]*values[2]">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Width"/>
</MultiBinding>
</Rectangle.Width>
</Rectangle>
<Polygon Fill="#FF06B025" x:Name="graph" />
<Label Canvas.Left="0" Width="380" HorizontalContentAlignment="Right" Foreground="Black" Content="{Binding Path=Caption, RelativeSource={RelativeSource TemplatedParent}}">
<Canvas.Bottom>
<MultiBinding Converter="{StaticResource JScript}" ConverterParameter="(values[2]*0.8)/values[1]*values[0]">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Rate"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="RateMaximum"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Height"/>
</MultiBinding>
</Canvas.Bottom>
</Label>
<Line X1="0" X2="380" Stroke="Black">
<Canvas.Bottom>
<MultiBinding Converter="{StaticResource JScript}" ConverterParameter="(values[2]*0.8)/values[1]*values[0]">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Rate"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="RateMaximum"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Height"/>
</MultiBinding>
</Canvas.Bottom>
</Line>
</Canvas>
</ControlTemplate>
</RangeBase.Resources>
</rb:RateBase>
Gracias Ross, en realidad logré algo muy cercano usando un RelativeSource, aunque lo usé ' FindAncestor 'y' Width ', pero adoptaré su sugerencia en su lugar. – Ian
Gracias. Me gustó esto y funciona bien: Width = "{Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = {x: Type Window}}, Path = Width}" –