Style content via setters v ContentTemplate

Your Content property is set to a DataTemplate

DataTemplates are meant to be used with Template properties, and not directly inserted into the VisualTree via the Content property

Change your Style Setter to set the ContentTemplate instead of Content and it should work fine

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <TextBlock Text="a" FontFamily="Wingdings 3" FontWeight="Bold" FontSize="18" Foreground="Navy" />
        </DataTemplate>
    </Setter.Value>
</Setter>

As for your second question, I prefer the first because its simpler, and I think it may contain fewer elements in the Visual Tree (I'd have to double-check that)