我创建的参数不起作用 usercontrol wpf
my parameter created not working usercontrol wpf
<Border Grid.Row="0" Height="auto" x:Name="BorderEcs" Background="#9494a5" BorderThickness="1,0,1,1" BorderBrush="#9494a5" CornerRadius="10,10,0,0">
<StackPanel Height="auto">
<Label x:Name="LblTitl" Content="" Margin="5,0,0,0" Height="auto" Foreground="#FFFFFF" FontFamily="Century Gothic" FontSize="13" />
<DataGrid Width="{Binding ControlWidth, RelativeSource={RelativeSource Self},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Height="{Binding ControlHeight, RelativeSource={RelativeSource Self},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CellStyle="{StaticResource DataGridContentCellCentering}"
RowStyle="{StaticResource RowStyle}"
ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"
Style="{StaticResource DataGridStyle}"
AlternatingRowBackground="White"
AlternationCount="2">
</DataGrid>
</StackPanel>
{
public 部分 class UCDataGrid:用户控件,INotifyPropertyChanged
{
publicUCDataGrid()
{
初始化组件();
数据上下文=这个;
}
public static DependencyProperty ControlHeightProperty =
DependencyProperty.Register("ControlHeight", typeof(int), typeof(UCDataGrid));
public static DependencyProperty ControlWidthProperty =
DependencyProperty.Register("ControlWidth", typeof(int), typeof(UCDataGrid));
public event PropertyChangedEventHandler PropertyChanged;
public int ControlHeight
{
get { return (int)GetValue(ControlHeightProperty); }
set { SetValue(ControlHeightProperty, value);
OnProperyChanged("ControlHeight");
}
}
public int ControlWidth
{
get { return (int)GetValue(ControlWidthProperty); }
set { SetValue(ControlWidthProperty, value); OnProperyChanged("ControlWidth"); }
}
public void OnProperyChanged(string propName = null)
{
PropertyChangedEventHandler propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
}
<us:UCDataGrid x:Name="d" ControlWidth="1" ControlHeight="10" />
请尝试下面的代码,它对我有用。为简单起见,我刚刚包含了 ControlWidth
的代码
public partial class UCDataGrid : UserControl
{
public UCDataGrid()
{
InitializeComponent();
}
public static DependencyProperty ControlWidthProperty =
DependencyProperty.Register("ControlWidth", typeof(double), typeof(UCDataGrid),new UIPropertyMetadata());
public double ControlWidth
{
get { return (double)GetValue(ControlWidthProperty); }
set { SetValue(ControlWidthProperty, value); }
}
}
现在在 xaml 中将 Name 设置为您的 UserControl 并访问它以设置绑定。暂时删除所有样式并检查以确保没有在任何其他地方设置宽度和高度。
<UserControl Name="root">
<Border Grid.Row="0" Height="auto" x:Name="BorderEcs" Background="#9494a5" BorderThickness="1,0,1,1" BorderBrush="#9494a5" CornerRadius="10,10,0,0">
<StackPanel Height="auto">
<Label x:Name="LblTitl" Content="" Margin="5,0,0,0" Height="auto" Foreground="#FFFFFF" FontFamily="Century Gothic" FontSize="13" />
<DataGrid Width="{Binding ElementName=root, Path=ControlWidth, UpdateSourceTrigger=PropertyChanged}"
Height="{Binding ElementName=root, Path=ControlHeight, UpdateSourceTrigger=PropertyChanged}"
CellStyle="{StaticResource DataGridContentCellCentering}"
RowStyle="{StaticResource RowStyle}"
ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"
Style="{StaticResource DataGridStyle}"
AlternatingRowBackground="White"
AlternationCount="2">
</DataGrid>
</StackPanel>
</UserControl>
希望对您有所帮助
<Border Grid.Row="0" Height="auto" x:Name="BorderEcs" Background="#9494a5" BorderThickness="1,0,1,1" BorderBrush="#9494a5" CornerRadius="10,10,0,0">
<StackPanel Height="auto">
<Label x:Name="LblTitl" Content="" Margin="5,0,0,0" Height="auto" Foreground="#FFFFFF" FontFamily="Century Gothic" FontSize="13" />
<DataGrid Width="{Binding ControlWidth, RelativeSource={RelativeSource Self},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Height="{Binding ControlHeight, RelativeSource={RelativeSource Self},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CellStyle="{StaticResource DataGridContentCellCentering}"
RowStyle="{StaticResource RowStyle}"
ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"
Style="{StaticResource DataGridStyle}"
AlternatingRowBackground="White"
AlternationCount="2">
</DataGrid>
</StackPanel>
{ public 部分 class UCDataGrid:用户控件,INotifyPropertyChanged { publicUCDataGrid() { 初始化组件(); 数据上下文=这个; } public static DependencyProperty ControlHeightProperty = DependencyProperty.Register("ControlHeight", typeof(int), typeof(UCDataGrid));
public static DependencyProperty ControlWidthProperty =
DependencyProperty.Register("ControlWidth", typeof(int), typeof(UCDataGrid));
public event PropertyChangedEventHandler PropertyChanged;
public int ControlHeight
{
get { return (int)GetValue(ControlHeightProperty); }
set { SetValue(ControlHeightProperty, value);
OnProperyChanged("ControlHeight");
}
}
public int ControlWidth
{
get { return (int)GetValue(ControlWidthProperty); }
set { SetValue(ControlWidthProperty, value); OnProperyChanged("ControlWidth"); }
}
public void OnProperyChanged(string propName = null)
{
PropertyChangedEventHandler propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
}
<us:UCDataGrid x:Name="d" ControlWidth="1" ControlHeight="10" />
请尝试下面的代码,它对我有用。为简单起见,我刚刚包含了 ControlWidth
的代码public partial class UCDataGrid : UserControl
{
public UCDataGrid()
{
InitializeComponent();
}
public static DependencyProperty ControlWidthProperty =
DependencyProperty.Register("ControlWidth", typeof(double), typeof(UCDataGrid),new UIPropertyMetadata());
public double ControlWidth
{
get { return (double)GetValue(ControlWidthProperty); }
set { SetValue(ControlWidthProperty, value); }
}
}
现在在 xaml 中将 Name 设置为您的 UserControl 并访问它以设置绑定。暂时删除所有样式并检查以确保没有在任何其他地方设置宽度和高度。
<UserControl Name="root">
<Border Grid.Row="0" Height="auto" x:Name="BorderEcs" Background="#9494a5" BorderThickness="1,0,1,1" BorderBrush="#9494a5" CornerRadius="10,10,0,0">
<StackPanel Height="auto">
<Label x:Name="LblTitl" Content="" Margin="5,0,0,0" Height="auto" Foreground="#FFFFFF" FontFamily="Century Gothic" FontSize="13" />
<DataGrid Width="{Binding ElementName=root, Path=ControlWidth, UpdateSourceTrigger=PropertyChanged}"
Height="{Binding ElementName=root, Path=ControlHeight, UpdateSourceTrigger=PropertyChanged}"
CellStyle="{StaticResource DataGridContentCellCentering}"
RowStyle="{StaticResource RowStyle}"
ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"
Style="{StaticResource DataGridStyle}"
AlternatingRowBackground="White"
AlternationCount="2">
</DataGrid>
</StackPanel>
</UserControl>
希望对您有所帮助