Я нашел решение. Хитрость заключается в использовании "BindingProxy"
.
Я не совсем понял, почему мне пришлось так решать. Может быть, кто-то может дать мне объяснение или опубликовать лучшее решение. 100
public class BindingProxy : Freezable
{
public static readonly DependencyProperty DataProperty;
static BindingProxy()
{
DataProperty = DependencyProperty.Register(nameof(Data), typeof(object), typeof(BindingProxy));
}
public object Data
{
get => GetValue(DataProperty);
set => SetValue(DataProperty, value);
}
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
}
<Style TargetType="productionControls:ZlsUnitBrowserActive">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="productionControls:ZlsUnitBrowserActive">
<DataGrid>
<DataGrid.Resources>
<xamlHelper:BindingProxy x:Key="DataContextBindingProxy" Data="{Binding RelativeSource={RelativeSource TemplatedParent}}"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate
MaxWidth="{Binding Path=Data.MaxWidthIdentifier, Source={StaticResource DataContextBindingProxy}}"
CellTemplate="{Binding Path=Data.MaxWidthIdentifier, Source={StaticResource PropertiesDataTemplate}"/>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>