также изменить путь на ViewportWidth!
<Grid x:Name="mainGrid">
//and some elements exist there
<Grid>
<Border x:Name="border_btn" Width="{Binding ElementName=root ,Path=ViewportWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Grid>
используйте ViewportWidth вместо ActualWidth, потому что в этом случае ActualWidth всегда отображается 0!
для проверки этой проблемы вы можете проверить это с помощью этой строки в вашем xaml.
<TextBlock Text="{Binding ElementName=mainGrid, Path=ActualWidth ,Mode=TwoWay}" Foreground="Red"/>