У меня очень сложное время для настройки привязки, которая, по-моему, должна быть легкой.Помощь очень ценится.
У меня есть словарь ресурсов с именем FormResource.xaml.В этом словаре содержится стиль для ScrollView, для которого я переделываю шаблон.Цель в том, чтобы я хотел использовать более широкую вертикальную полосу прокрутки.
<Style x:Key="LargeScrolling" TargetType="ScrollViewer">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<Grid Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="ScrollContentPresenter"
Margin="{TemplateBinding Padding}"
ContentTemplate="{TemplateBinding ContentTemplate}"/>
<ScrollBar x:Name="PART_VerticalScrollBar"
Style="{StaticResource LargeVerticalScrollBar}"
Width="{Binding ElementName=MDTForm, Path=ScrollBarWidth}"
IsTabStop="False"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Grid.Column="1" Grid.Row="0" Orientation="Vertical"
ViewportSize="{TemplateBinding ViewportHeight}"
Maximum="{TemplateBinding ScrollableHeight}"
Minimum="0"
Value="{TemplateBinding VerticalOffset}"
Margin="0,-1,-1,-1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
У меня есть UserControl с именем FormControl.
public class FormControl : UserControl
Раньше я использовал его как частичный класс с компонентами XAML., в котором сработало то, что я пытаюсь сделать, но мне пришлось удалить XAML, поскольку я наследую этот класс в другой сборке, а WPF не позволяет вам наследовать от частичного класса в другой сборке.
InFormControl Я определяю свойство ScrollBarWidth.
public static readonly DependencyProperty ScrollBarWidthProperty = DependencyProperty.Register("ScrollBarWidth", typeof(double), typeof(FormControl));
public double ScrollBarWidth
{
get { return (double)base.GetValue(ScrollBarWidthProperty); }
set { base.SetValue(ScrollBarWidthProperty, value); }
}
Когда у меня это было как частичный класс в основном объявлении, я дал классу FormControl Имя MDTForm, которое я использую как ElementName в моей привязке.,Я попытался зарегистрировать это имя в FormClass.cs, но независимо от того, что я делаю, полоса прокрутки не собирает значение свойства.
Здесь я создаю свой ScrollViewer в классе FormControl.
_canvasScrollViewer = new ScrollViewer();
_canvasScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
_canvasScrollViewer.VerticalAlignment = VerticalAlignment.Top;
_canvasScrollViewer.MaxHeight = Constants.ScrollViewMaxHeight;
_canvasScrollViewer.Style = (Style)FindResource("LargeScrolling");
Единственный способ заставить это работать - это привязать к статическому свойству.Я использовал это для привязки.
Width="{Binding Source={x:Static form:FormControl.ScrollBarWidthP}}"
Затем определил свойство как таковое.
public static double ScrollBarWidth { get; set; }
Однако я не хочу этого, так как я могу иметь несколько объектов FormControl, загруженных нав то же время, и они могут не иметь одно и то же свойство ширины полосы прокрутки.