我正在 WPF 系結中邁出第一步,我想系結兩個可視組件: aDataGrid和 a Label,后者放在另一個之上(不是在它前面,我的意思是)。
這是我目前擁有的:
<DataGrid x:Name="dg_SomeTable" HorizontalAlignment="Left" Height="auto"
Margin="10,26,0,0" VerticalAlignment="Stretch" Width="74"/>
<Label Content="SomeTable" HorizontalAlignment="Left" Margin="10,0,0,0"
VerticalAlignment="Top"
Width="{Binding Path=ActualWidth, ElementName=dg_SomeTable}"/>
如您所見,Label的寬度限制為 的寬度DataGrid。
這已經很有用了,但我想更進一步,不僅系結寬度,還系結 X 坐標。
我相信 X 坐標是Margin屬性的第一個條目,但我不能簡單地系結到整個屬性,因為這會將 myLabel放在我的DataGrid.
我已經做了一些非常幼稚的步驟:
- 我嘗試使用
Margin.x或Margin.X或...,但這似乎不起作用。 - 我嘗試替換為
Margin,Left但這似乎不存在,而且我沒有靈感。
當 X 坐標的定義嵌入到Margin屬性中時,有人知道將一個可視組件的 X 坐標系結到另一個可視組件的 X 坐標的好方法嗎?
哦,我檢查了這個類似的問題,但這涉及實際編程,我想知道這個看似基本的問題是否有一個簡單的 XAML 解決方案。
評論后編輯,詢問更多資訊:
通常我的 XAML 如下所示:
<TabControl ...
<TabItem ...
<Grid ...
<DataGrid x:Name="dg_SomeTable" ... Margin=... />
<Label Content="SomeTable" ... />
按照提議,這應該替換為:
<TabControl ...
<TabItem ...
<Canvas ...
<DataGrid x:Name="dg_SomeTable" Width="222" Canvas.Left="10" ...
<Label Content="SomeTable"
Canvas.Left="{Binding Path=Left,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Canvas}}}"
Width="{Binding Path=ActualWidth,
ElementName=dg_Locations}"/>
I can already hear your reaction "Now you are referring to the left of the Canvas where it's located in, while you should refer to the Canvas.Left of the DataGrid".
Well, I tried these:
Canvas.Left="{Binding Path=Canvas.Left, ElementName=dg_SomeTable}"
Canvas.Left="{Binding Path=Left, ElementName=dg_SomeTable}"
None of them worked.
How can I refer to the Canvas.Left of the DataGrid?
uj5u.com熱心網友回復:
如何參考 DataGrid 的 Canvas.Left?
像這樣(注意附加屬性名稱周圍的括號):
Canvas.Left="{Binding Path=(Canvas.Left), ElementName=dg_SomeTable}"
uj5u.com熱心網友回復:
使用轉換器
第1步。制作轉換器
public class MarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is Thickness)) return new Thickness(0, 0, 0, 0);
Thickness gridMargin = (Thickness)value;
return new Thickness(gridMargin.Left, 0,0,0);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return parameter;
}
}
第2步。添加到資源
<Window.Resources>
<local:MarginConverter x:Key="MarginConverter"/>
</Window.Resources>
第三步。用轉換器系結保證金
<Label Content="SomeTable" HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="{Binding Path=ActualWidth, ElementName=dg_SomeTable}"
Margin="{Binding Margin, ElementName=dg_SomeTable, Converter= {StaticResource MarginConverter}}"/>
此轉換器獲取 dg_SomeTable 的 Margin 并回傳新的 Margin ( dg_table's Margin.Left, 0 , 0, 0 )
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/349414.html
標籤:c# wpf xaml data-binding
